主文件
#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__)不会被执行。有人可以告诉我我是否理解正确?如果不是,请给出解释。
让我们添加一些调试输出:
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'].
这意味着一条规则:尽量不要在代码的任何地方导入正在运行的模块。
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |