Python中的__builtin__模块

bdh*_*har 4 python module

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

import Test
dir(Test)
Run Code Online (Sandbox Code Playgroud)

除非我导入模块,否则我将无法使用其中定义的函数.

但是__builtin__模块中的所有功能都可以在不导入的情况下使用.但没有import __builtin__我无法做到dir(__builtin__).这是否意味着我们使用这些功能而不导入整个模块?

from __builtin__ import zip
Run Code Online (Sandbox Code Playgroud)

它是否像上面那样?但如果我这样做del zip,我明白了

NameError:未定义名称"zip"

任何人都可以解释这种行为吗?

Sve*_*ach 7

正如Python语言文档中所解释的那样,Python中的名称首先在本地范围中查找,然后在任何封闭的本地范围中查找,然后在模块级范围中查找,最后在内置函数的命名空间中查找.所以内置插件在某种程度上是特殊的.它们不会在模块的范围内导入,但如果在其他任何地方找不到名称,Python将在范围内查找它__builtin__.

请注意,您可以访问此范围的内容而无需导入它.一种可移植的方法是

import sys
print(dir(sys.modules["__builtin__"]))
Run Code Online (Sandbox Code Playgroud)

在CPython中,这也有效

print(dir(__builtins__))
Run Code Online (Sandbox Code Playgroud)

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