main.py
#main.py
import main
print('Hello')
输出:
Hello
Hello
我相信,到import main
行时,main
已在sys.modules
中注册,因此,另一个脚本的导入语句- ,不是__main__
的一部分-未执行。有人可以告诉我我是否理解正确?如果没有,请给出解释。
答案 0 :(得分:6)
让我们添加一些调试输出:
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']
。
这意味着一条规则:尝试不要在代码中的任何位置导入正在运行的模块。
答案 1 :(得分:1)
它只打印两次,因为一个模块实际上只加载一次。这样可以防止可能的未绑定递归。因此,您的打印语句将由导入的模块执行一次,并由主程序执行一次。
答案 2 :(得分:0)
由于您要在main内部导入main,因此print语句将执行两次,这就是python的工作原理