为什么Hello只打印两次?

0 python module sys

主文件

#main.py
import main
print('Hello')
Run Code Online (Sandbox Code Playgroud)

输出

Hello
Hello
Run Code Online (Sandbox Code Playgroud)

我相信,当涉及到该行时import main,当时main已注册sys.modules,因此另一个脚本的 import 语句(我相信它不是其中的一部分__main__)不会被执行。有人可以告诉我我是否理解正确?如果不是,请给出解释。

Kla*_* D. 6

让我们添加一些调试输出:

import sys
print([key for key in sys.modules.keys() if 'main' in key])
import main
Run Code Online (Sandbox Code Playgroud)

它打印:

['__main__']
['__main__', 'main']
Run Code Online (Sandbox Code Playgroud)

这是为什么?

如果您运行一个模块,它不会作为模块名称添加到sys.modules. 相反,它将始终是__main__

如果然后按其名称 ( main)导入模块。该名称不存在,sys.modules因此模块将再次导入,执行其代码并将模块存储在sys.modules其名称下。

执行main.py时将打印['__main__'],重新导入时将打印两个模块名称:['__main__', 'main'].

这意味着一条规则:尽量不要在代码的任何地方导入正在运行的模块。