Python中的__builtin__模块

5 投票
3 回答
10383 浏览
提问于 2025-04-16 13:49

如果我有一个模块叫做 Test,而我想列出里面所有的函数,我可以这样做:

import Test
dir(Test)

除非我导入这个模块,否则我无法使用里面定义的函数。

不过,所有在 __builtin__ 模块里的函数可以在不导入的情况下使用。但是如果我不执行 import __builtin__,我就无法使用 dir(__builtin__) 来查看里面的内容。这是不是意味着我们可以在不导入整个模块的情况下使用这些函数呢?

from __builtin__ import zip

这是不是类似于上面的情况?但是如果我执行 del zip,我会得到

NameError: name 'zip' is not defined

有没有人能解释一下这个现象?

3 个回答

1

当Python解释器启动时,它默认会执行一些类似于

from __builtin__ import *

的代码,这样你就可以使用__builtin__模块里面定义的所有函数和属性。

不过,如果你想直接使用__builtin__这个符号本身,你需要这样做:

导入__builtin__

这就是导入语句的语法是怎么工作的。

1

我对Python并不是很了解,但也许你想要的是 dir(__builtins__),注意这里有个"s"。

在普通的Python 3.1上,这个方法对我来说是有效的。

8

Python语言文档中解释过,Python中的名字是通过先在本地范围内查找,然后在任何外层的本地范围,再到模块级别的范围,最后在内置命名空间中查找来解决的。所以内置的东西有点特别。它们并不是在你的模块范围内导入的,但如果在其他地方找不到某个名字,Python会在__builtin__这个范围内查找。

值得注意的是,你可以在不导入的情况下访问这个范围的内容。一个便捷的方法是

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

在CPython中,这样也可以工作

print(dir(__builtins__))

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

撰写回答