如何在运行时提供__builtin__?

时间:2013-04-27 13:04:37

标签: python

为什么第一个语句返回NameError,而max可用

>>> __builtin__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name '__builtin__' is not defined
>>> max
<built-in function max>
>>> import __builtin__
>>> __builtin__.max
<built-in function max>

3 个答案:

答案 0 :(得分:4)

__builtin__只是一种导入/访问伪模块的方法,以防您想要替换或添加始终全局可用的函数。您无需导入它即可使用这些功能。但__builtin__本身不存在__builtin__,因此如果不先导入它就无法使用。

有关此模块的详细信息,请参阅the python docs

答案 1 :(得分:4)

  

与代码块执行相关联的builtins命名空间实际上是通过在其全局命名空间中查找名称__builtins__来找到的;这应该是字典或模块(在后一种情况下,使用模块的字典)。默认情况下,在__main__模块中,__builtins__是内置模块__builtin__(注意:没有'');在任何其他模块中,__builtins____builtin__模块本身的字典的别名。 __builtins__可以设置为用户创建的字典,以创建一种弱形式的受限执行。

所以它确实在查找__builtins__(因为你在主模块中)

>>> __builtins__.max
<built-in function max>

但是如上所述,这只是__builtin__的别名(它不是主模块命名空间的一部分,尽管它已被__builtins__加载和引用)。

答案 2 :(得分:2)

您无需import __builtin__即可获得所有built-in个名称。但您确实需要导入它才能在代码范围内使用名称__builtin__