如果我制作一个test_folder.__init__
,其中包含:
constant1 = 1
from test_folder import moduleVar1
然后从父目录运行以下脚本:
import sys
from test_folder import constant1
print(constant1)
print(sys.modules)
sys.modules
告诉我test_folder.moduleVar1
已导入。
sys.modules
的输出:
'test_folder.moduleVar1': <module 'test_folder.moduleVar1' from 'C:...\test_folder\moduleVar1.py'>
为什么当我还没有指定导入时,此模块会显示为导入?
答案 0 :(得分:2)
你所看到的看起来是正确的。您不能只导入一个变量。将导入整个__init__
模块以及其他导入。请注意,sys.modules
并不表示某些内容已导入当前名称空间,并且与当前名称空间无关。本质上,sys.modules
是一个全局字典(或缓存),Python使用它来确保如果您多次导入模块或引用其子模块,它不必重新加载模块,并且它不会从两个不同的地方加载相同的模块。
因此,如果在您的代码访问的任何模块或库中 中加载了一个模块,那么它将保留在sys.modules
之后。
所以,在你的主要例程中,当你说:
import sys
from test_folder import constant1
正在加载__init__
以访问constant1
,但由于__init__
代码也会导入moduleVar1
,因此python会在sys.modules
中输入一个条目作为记录保留条目,即使它未导入主模块,因此如果您打印出sys.modules
,您将看到剩余条目。