为什么Hello只打印两次?

时间:2020-06-10 06:23:16

标签: python module sys

main.py

#main.py
import main
print('Hello')

输出

Hello
Hello

我相信,到import main行时,main已在sys.modules中注册,因此,另一个脚本的导入语句- ,不是__main__ 的一部分-未执行。有人可以告诉我我是否理解正确?如果没有,请给出解释。

3 个答案:

答案 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的工作原理