main.py
#main.py
import main
print('Hello')
輸出:
Hello
Hello
我相信,当涉及到行 import main
,当时。main
注册于 sys.modules
因此,另一个脚本的导入语句 - 我相信,这不属于 __main__
- 是不执行的。谁能告诉我,我的理解是否正确?如果不对,请给个解释。
我们来加一点调试输出。
import sys
print([key for key in sys.modules.keys() if 'main' in key])
import main
它的打印结果是:
['__main__']
['__main__', 'main']
为什么会这样?
如果你运行一个模块,它将 不 作为其模块名称添加到 sys.modules
. 相反,它将永远是 __main__
.
如果你用它的名字导入模块(main
). 该名称不存在于 sys.modules
结果模块将被再次导入,其代码被执行,模块存储在 sys.modules
在其名下。
在执行 main.py
它将打印 ['__main__']
在重新导入时,它将打印出两个模块的名称。['__main__', 'main']
.
这意味着一个规则:尽量不要在你的代码中任何地方导入你正在运行的模块。
它只打印两次,因为一个模块实际上只被加载一次。这防止了可能的无约束递归。所以你的 print 语句会被导入的模块执行一次,被主程序执行一次。
因为你是在main里面导入main,所以print语句会被执行两次,这就是python的工作原理。