提问人:rkg125 提问时间:7/7/2023 最后编辑:zoldxkrkg125 更新时间:7/8/2023 访问量:82
你能澄清一下 python 中 __builtins__ 和内置之间的区别吗
Can you clarify the distinction between __builtins__ and builtins in python
问:
您可以使用许多内置函数,而无需导入任何内容。这些包括 、 、 、 等。但是,如果要查看 的完整列表,则必须首先导入内置函数。pow()
open()
sum()
max()
dir()
如果你在没有先导入的情况下执行一个 ,你会得到dir(builtins)
builtins
>>> dir(builtins)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'builtins' is not defined
如何在不导入内置函数的情况下使用这些函数,但必须导入内置函数才能查看完整列表?
此外,还有一种叫做的东西,您可以在不导入它的情况下使用它。但这会产生一个完全不同的函数列表。"__builtins__"
dir()
这是非常令人困惑的。为什么有两个内置函数,为什么它们的行为不同?
顺便说一句,我在 Mac 上运行。也许在另一个版本中情况有所不同。Python 3.7.11
答:
文档几乎说明了所有要说的内容:
builtins
— 内置对象该模块提供对 Python [..] 的所有“内置”标识符的直接访问
大多数应用程序通常不会显式访问此模块,但在提供与内置值同名的对象的模块中可能很有用,但其中也需要该名称的内置。
[..]
作为实现细节,大多数模块的名称都作为其全局的一部分提供。的值通常是此模块或此模块属性的值。由于这是一个实现细节,因此 Python 的替代实现可能不会使用它。
__builtins__
__builtins__
__dict__
换句话说,该模块包含一堆“内置”函数,这些函数非常经常需要,以至于该语言使它们隐式地可用于您的程序,而无需您显式地使用它们。这只是为了方便程序员。如果需要,您可以显式设置,但通常不会(因为每个模块中都已经提供了 的内容)。builtins
import
import builtins
builtins
__builtins__
作为这种神奇地在每个模块中可用的逻辑的副作用而存在。这是一个你不应该太注意的实现细节。
"__builtins__"
只是一个任意字符串,没有进一步的含义。 与 或 相同;它检查字符串对象。dir("__builtins__")
dir("foo")
dir("")
评论
builtins
__builtins__
是一个内置模块,它提供了 Python 中自动提供的一组最小的内置名称,而是一个实际的模块,它使用需要显式导入的其他内置名称来扩展功能。builtins
dir("builtins")
将给出字符串对象的所有属性。你还不如打字,得到同样的结果。dir("rkg125")