为什么 __builtins__ 既是模块又是字典
我正在使用内置模块插入一些实例,以便可以全局访问它们以进行调试。 __builtins__
模块的问题在于它是主脚本中的模块,并且是模块中的字典,但由于我的脚本根据情况可以是主脚本或模块,所以我必须这样做this:
if isinstance(__builtins__, dict):
__builtins__['g_frame'] = 'xxx'
else:
setattr(__builtins__, 'g_frame', 'xxx')
有没有比这更短的解决方法? 更重要的是,为什么 __builtins__
会有这样的行为?
这是一个可以看到这一点的脚本。 创建模块 a.py:
#module-a
import b
print 'a-builtin:',type(__builtins__)
创建模块 b.py:
#module-b
print 'b-builtin:',type(__builtins__)
现在运行 python a.py:
$ python a.py
b-builtin: <type 'dict'>
a-builtin: <type 'module'>
I am using the built-in module to insert a few instances, so they can be accessed globally for debugging purposes. The problem with the __builtins__
module is that it is a module in a main script and is a dict in modules, but as my script depending on cases can be a main script or a module, I have to do this:
if isinstance(__builtins__, dict):
__builtins__['g_frame'] = 'xxx'
else:
setattr(__builtins__, 'g_frame', 'xxx')
Is there a workaround, shorter than this? More importantly, why does __builtins__
behave this way?
Here is a script to see this. Create a module a.py:
#module-a
import b
print 'a-builtin:',type(__builtins__)
Create a module b.py:
#module-b
print 'b-builtin:',type(__builtins__)
Now run python a.py:
$ python a.py
b-builtin: <type 'dict'>
a-builtin: <type 'module'>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为您需要
__builtin__
模块(注意单数)。请参阅文档:
I think you want the
__builtin__
module (note the singular).See the docs: