【发布时间】:2026-01-11 05:05:01
【问题描述】:
我希望有人可以提供一些关于 Python3 在导入期间创建的额外名称绑定的见解。这是测试用例:
我创建了一个名为 spam 的测试包(我知道是原始的)。它包含以下3个文件:
文件内容如下:
__init__.py:
from .foo import Foo
from .bar import Bar
foo.py:
def Foo():
pass
bar.py:
def Bar():
pass
很简单的东西。当我导入spam 包时,我可以看到它创建了与spam 命名空间中的Foo() 和Bar() 函数 的名称绑定,这是预期的。出乎意料的是,它还将名称绑定到spam 命名空间中的foo 和bar 模块,如下所示。
更有趣的是,如果我在__main__ 中导入Foo() 和Bar() 函数,这些对模块的额外名称绑定不会发生,如下所示:
阅读有关导入语句的文档(语言参考和教程),我没有看到任何会导致这种情况发生的情况。
谁能解释一下为什么从包中的模块导入函数时,它还会将名称绑定到包含该函数的模块?
【问题讨论】:
标签: python python-3.x ipython jupyter-notebook python-import