python – 在自定义命名空间中调用execfile()在’__builtin__’命名空间中执行代码
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 在自定义命名空间中调用execfile()在’__builtin__’命名空间中执行代码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1351字,纯文字阅读大概需要2分钟。
内容图文
![python – 在自定义命名空间中调用execfile()在’__builtin__’命名空间中执行代码](/upload/InfoBanner/zyjiaocheng/812/5b8ba4db248040dbb5355950c95d53ce.jpg)
当我调用execfile而不传递globals或locals参数时,它会在当前命名空间中创建对象,但是如果我调用execfile并为globals(和/或locals)指定一个dict,它会在__builtin__命名空间中创建对象.
请看以下示例:
# exec.py
def myfunc():
print 'myfunc created in %s namespace' % __name__
exec.py是从main.py execfile’d,如下所示.
# main.py
print 'execfile in global namespace:'
execfile('exec.py')
myfunc()
print
print 'execfile in custom namespace:'
d = {}
execfile('exec.py', d)
d['myfunc']()
当我从命令行运行main.py时,我得到以下输出.
execfile in global namespace:
myfunc created in __main__ namespace
execfile in custom namespace:
myfunc created in __builtin__ namespace
为什么在第二种情况下它在__builtin__命名空间中运行?
此外,如果我然后尝试从__builtins__运行myfunc,我会得到一个AttributeError. (这是我希望发生的事情,但是为什么__name__设置为__builtin__?)
>>> __builtins__.myfunc()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: 'module' object has no attribute 'myfunc'
谁能解释这种行为?
谢谢
解决方法:
首先,__ name__不是命名空间 – 它是对它所属模块名称的引用,即:somemod.py – > somemod .__ name__ ==’somemod’
例外情况是,如果您从命令行运行模块作为可执行文件,则__name__是’__main__’.
在您的示例中,幸运的是,您的模块作为main运行也称为main.
Execfile执行模块的内容而不将其作为模块导入.因此,__name__没有设置,因为它不是一个模块 – 它只是一个执行的代码序列.
内容总结
以上是互联网集市为您收集整理的python – 在自定义命名空间中调用execfile()在’__builtin__’命名空间中执行代码全部内容,希望文章能够帮你解决python – 在自定义命名空间中调用execfile()在’__builtin__’命名空间中执行代码所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。