5

为什么第一条语句返回NameError,whilemax可用

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

3 回答 3

4

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

有关此模块的更多信息,请参阅python 文档

于 2013-04-27T13:07:43.593 回答
4

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

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

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

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

于 2013-04-27T13:38:07.593 回答
2

您不需要import __builtin__为了所有内置名称都可用。但是您确实需要导入它才能使该名称__builtin__在您的代码范围内可用。

于 2013-04-27T13:07:55.750 回答