Python中的__builtin__模块

时间:2011-03-16 12:08:34

标签: python module

如果我有一个模块Test,如果我需要列出其中的所有功能,我会这样做:

import Test
dir(Test)

除非我导入模块,否则我将无法使用其中定义的功能。

但是__builtin__模块中的所有函数都可以在不导入的情况下使用。但是如果没有import __builtin__,我无法执行dir(__builtin__)。这是否意味着我们在不导入整个模块的情况下使用这些功能?

from __builtin__ import zip

它是否像上面那样?但如果我做del zip,我就会

  

NameError:名称'zip'未定义

有人可以解释一下这种行为吗?

3 个答案:

答案 0 :(得分:7)

the Python language docs中所述,Python中的名称首先在本地范围中查找,然后在任何封闭的本地范围内查找,然后在模块级范围内查找,最后在内置命名空间中解析。插件。所以内置插件在某种程度上是特殊的。它们在模块的范围内导入,但如果在其他任何地方找不到名称,Python将在__builtin__范围内查找。

请注意,您可以在不导入的情况下访问此范围的内容。一种可移植的方法是

import sys
print(dir(sys.modules["__builtin__"]))

在CPython中,这也有效

print(dir(__builtins__))

但这被认为是一个实现细节,可能不适用于其他Python实现或未来版本。

答案 1 :(得分:1)

我对python并不了解,但也许dir(__builtins__)带有“s”,是你所追求的?

在普通的Python 3.1上为我工作。

答案 2 :(得分:1)

当python解释器启动时,它将默认执行类似

的操作

from __builtin__ import *

允许您使用__builtin__ module

中定义的所有函数/属性

但是,要使用__builtin__符号本身,您需要执行

导入__builtin__

这就是import语句语法的工作原理。