为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Hello 只打印两次?

为什么 Hello 只打印两次?

繁花如伊 2023-01-04 16:41:43

main.py


#main.py

import main

print('Hello')

输出:


Hello

Hello

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


查看完整描述

3 回答

?
大话西游666

TA贡献1551条经验 获得超14个赞

让我们添加一些调试输出:


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'].


这暗示了一条规则:尽量不要在代码中的任何地方导入正在运行的模块。


查看完整回答
反对 回复 2023-01-04
?
蝴蝶不菲

TA贡献1546条经验 获得超4个赞

它只打印两次,因为一个模块实际上只加载了一次。这可以防止可能的未绑定递归。所以你的打印语句被导入的模块执行一次,主程序执行一次。



查看完整回答
反对 回复 2023-01-04
?
函数式编程

TA贡献1544条经验 获得超9个赞

由于您在 main 中导入 main 打印语句执行两次,这就是 python 的工作方式



查看完整回答
反对 回复 2023-01-04

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信