猿问

为什么 Hello 只打印两次?

main.py


#main.py

import main

print('Hello')

输出:


Hello

Hello

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


繁花如伊
浏览 117回答 3
3回答

大话西游666

让我们添加一些调试输出:import sysprint([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 中导入 main 打印语句执行两次,这就是 python 的工作方式
随时随地看视频慕课网APP

相关分类

Python
我要回答