为什么第一个语句返回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>
答案 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__
。