python execfile_python 3中execfile的替代方法是什么?

看来他们在Python 3中取消了所有简单的方法,即通过删除execfile()快速加载脚本

我是否有明显的替代品?

#1楼

根据文档 ,而不是

execfile("./filename")

采用

exec(open("./filename").read())

看到:

#2楼

正如最近在python-dev邮件列表上建议的那样 , runpy模块可能是一个可行的替代方案。 引用该消息:

execfile有细微的差别:

run_path始终创建一个新的名称空间。 它作为模块执行代码,因此全局变量和init_globals变量之间没有区别(这就是为什么只有init_globals参数的原因)。 返回全局变量。

在当前名称空间或给定名称空间中执行的execfile 。 如果给出了locals和globals的语义,则它们与类定义中的locals和globals相似。

run_path不仅可以执行文件,还可以执行蛋和目录(有关详细信息,请参阅其文档)。

#3楼

这就是我所拥有的(两个示例中的文件都已使用源代码将文件分配到file的路径):

execfile(file)

这是我替换为的内容:

exec(compile(open(file).read(), file, 'exec'))

我最喜欢的部分:第二个版本在Python 2和3中都可以正常工作,这意味着不必添加依赖于版本的逻辑。

#4楼

这是更好的方法,因为它从调用者那里获取了全局变量和本地变量:

import sys

def execfile(filename, globals=None, locals=None):

if globals is None:

globals = sys._getframe(1).f_globals

if locals is None:

locals = sys._getframe(1).f_locals

with open(filename, "r") as fh:

exec(fh.read()+"\n", globals, locals)

#5楼

尽管exec(open("filename").read())通常是execfile("filename")的替代选择,但它忽略了execfile支持的重要细节。

Python3.x的以下功能与直接执行文件具有相同的行为。 匹配运行python /path/to/somefile.py 。

def execfile(filepath, globals=None, locals=None):

if globals is None:

globals = {}

globals.update({

"__file__": filepath,

"__name__": "__main__",

})

with open(filepath, 'rb') as file:

exec(compile(file.read(), filepath, 'exec'), globals, locals)

# execute the file

execfile("/path/to/somefile.py")

笔记:

使用二进制读取以避免编码问题

保证关闭文件(Python3.x警告)

定义__main__ ,某些脚本依赖于此来检查它们是否作为模块加载,例如。 if __name__ == "__main__"

对于异常消息,设置__file__更好,某些脚本使用__file__来获取其他文件相对于它们的路径。

接受可选的globals和locals参数,就像execfile一样就地对其进行修改-因此,您可以通过在运行后回读变量来访问定义的任何变量。

与Python2的execfile不同,这默认情况下不会修改当前名称空间。 为此,您必须显式传递globals()和locals() 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值