17

我正在使用内置模块插入一些实例,因此可以全局访问它们以进行调试。该__builtins__模块的问题在于它是主脚本中的一个模块,并且是模块中的一个字典,但是由于我的脚本取决于案例可以是主脚本或模块,所以我必须这样做:

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'>
4

1 回答 1

16

我想你想要这个__builtin__模块(注意单数)。

请参阅文档:

27.3. __builtin__— 内置对象

CPython 实现细节:大多数模块的名称__builtins__(注意's')作为其全局变量的一部分。的值__builtins__通常是此模块或此模块的 [sic]__dict__属性的值。由于这是一个实现细节,因此 Python 的替代实现可能不会使用它。

于 2009-07-26T08:25:03.193 回答