如果我有一个模块Test
,如果我需要列出其中的所有功能,我会这样做:
import Test
dir(Test)
除非我导入模块,否则我将无法使用其中定义的功能。
但是__builtin__
模块中的所有函数都可以在不导入的情况下使用。但是如果没有import __builtin__
,我无法执行dir(__builtin__)
。这是否意味着我们在不导入整个模块的情况下使用这些功能?
from __builtin__ import zip
它是否像上面那样?但如果我做del zip
,我就会
NameError:名称'zip'未定义
有人可以解释一下这种行为吗?
答案 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语句语法的工作原理。