为什么 Hello 只打印两次?
Why is Hello printed only two times?
main.py
#main.py
import main
print('Hello')
输出:
Hello
Hello
我相信当涉及到行 import main
时,main
已在 sys.modules
中注册,因此另一个脚本的导入语句 - 我相信,它不是 __main__
的一部分 - 没有被执行。有人可以告诉我我是否理解正确吗?如果不是,请给出解释。
由于您在 main 中导入 main,所以打印语句执行了两次,这就是 python 的工作方式
让我们添加一点调试输出:
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']
.
这暗示了一个规则:尽量不要在代码中的任何地方导入您正在使用的模块。运行
它只打印两次,因为一个模块实际上只加载了一次。这可以防止可能的未绑定递归。所以你的打印语句被导入模块执行一次,主程序执行一次。
main.py
#main.py
import main
print('Hello')
输出:
Hello
Hello
我相信当涉及到行 import main
时,main
已在 sys.modules
中注册,因此另一个脚本的导入语句 - 我相信,它不是 __main__
的一部分 - 没有被执行。有人可以告诉我我是否理解正确吗?如果不是,请给出解释。
由于您在 main 中导入 main,所以打印语句执行了两次,这就是 python 的工作方式
让我们添加一点调试输出:
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']
.
这暗示了一个规则:尽量不要在代码中的任何地方导入您正在使用的模块。运行
它只打印两次,因为一个模块实际上只加载了一次。这可以防止可能的未绑定递归。所以你的打印语句被导入模块执行一次,主程序执行一次。