我使用内置模块插入一些实例,因此可以全局访问它们以进行调试。 __builtins__
模块的问题在于它是主脚本中的模块并且是模块中的dict,但是因为我的脚本取决于案例可以是主脚本或模块,所以我必须这样做:
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'>
我想你想要__builtin__
模块(注意单数)。
查看文档:
27.3.
__builtin__
— Built-in objectsCPython实现细节:大多数模块都有名称
__builtins__
(注意's'
)作为其全局变量的一部分提供。__builtins__
的值通常是此模块或此模块的[sic]__dict__
属性的值。由于这是一个实现细节,因此Python的替代实现可能不会使用它。