2013-04-27 67 views
5

为什么第一条语句返回NameError,而max__builtin__在运行时如何提供?

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

'__builtins __。max' – jamylak 2013-04-27 14:05:31

回答

4

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

所以真的是仰视__builtins__(因为你是主模块)

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

但正如上面提到的,这仅仅是__builtin__的别名(这不是主要的部分模块的名称空间,尽管它已被加载并由__builtins__引用)。

4

__builtin__只是导入/访问如果你想更换或添加功能,始终是全球可用伪模块的方式。您不需要导入它以使用这些功能。但__builtin__本身在__builtin__上不存在,因此如果不先导入它,则不可用。

有关此模块的更多信息,请参阅the python docs

2

您不需要import __builtin__以使所有built-in名称都可用。但是您需要导入它才能在代码范围内使用名称__builtin__

相关问题