我正在使用内置模块插入一些实例,因此可以出于调试目的对其进行全局访问。__builtins__模块的问题在于它是主脚本中的模块,也是模块中的命令,但是由于我的脚本(视情况而定)可以是主脚本或模块,因此我必须这样做:
__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'>
我认为您需要该__builtin__模块(注意单数)。
__builtin__
参见文档:
27.3。__builtin__—内置对象 CPython实现细节: 大多数模块的名称__builtins__(请注意's')作为其全局变量的一部分可用。的值__builtins__通常是此模块或此模块的[sic] __dict__ 属性的值。由于这是一个实现细节,因此Python的其他实现可能不会使用它。
27.3。__builtin__—内置对象
CPython实现细节: 大多数模块的名称__builtins__(请注意's')作为其全局变量的一部分可用。的值__builtins__通常是此模块或此模块的[sic] __dict__ 属性的值。由于这是一个实现细节,因此Python的其他实现可能不会使用它。
's'
__dict__