【问题标题】:__builtin__ module in PythonPython 中的 __builtin__ 模块
【发布时间】:2011-03-16 12:08:33
【问题描述】:

如果我有一个模块 Test 并且我需要列出其中的所有函数,我会这样做:

import Test
dir(Test)

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

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

from __builtin__ import zip

和上面的一样吗?但如果我这样做del zip,我会得到

NameError: 名称“zip”未定义

谁能解释一下这种行为?

【问题讨论】:

  • 在 CPython 中,您可以在不导入任何内容的情况下执行 dir(__builtins__),但这是 CPython 的实现细节。

标签: python module


【解决方案1】:

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

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

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

在 CPython 中,这也有效

print(dir(__builtins__))

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

【讨论】:

    【解决方案2】:

    我对python一无所知,但也许dir(__builtins__),带有“s”,是你想要的吗?

    在纯 Python 3.1 上为我工作。

    【讨论】:

    【解决方案3】:

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

    from __builtin__ import *

    它允许您使用在__builtin__ 模块中定义的所有功能/属性

    但是要使用__builtin__ 符号本身,您需要这样做

    导入__builtin__

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

    【讨论】:

    • 这真的很有帮助! Python 2.6.6
    猜你喜欢
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多