3 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊
讓我們添加一些調(diào)試輸出:
import sys
print([key for key in sys.modules.keys() if 'main' in key])
import main
它打?。?/p>
['__main__']
['__main__', 'main']
這是為什么?
如果您運(yùn)行一個(gè)模塊,它不會(huì)作為其模塊名稱添加到sys.modules. 相反,它將永遠(yuǎn)是__main__。
如果您隨后按名稱 ( main) 導(dǎo)入模塊。該名稱不存在,sys.modules因此模塊將再次導(dǎo)入,執(zhí)行其代碼并將模塊存儲(chǔ)在sys.modules其名稱下。
執(zhí)行main.py時(shí)會(huì)打印['__main__'],重新導(dǎo)入時(shí)會(huì)打印兩個(gè)模塊名稱:['__main__', 'main'].
這暗示了一條規(guī)則:盡量不要在代碼中的任何地方導(dǎo)入正在運(yùn)行的模塊。

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
它只打印兩次,因?yàn)橐粋€(gè)模塊實(shí)際上只加載了一次。這可以防止可能的未綁定遞歸。所以你的打印語(yǔ)句被導(dǎo)入的模塊執(zhí)行一次,主程序執(zhí)行一次。

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
由于您在 main 中導(dǎo)入 main 打印語(yǔ)句執(zhí)行兩次,這就是 python 的工作方式
添加回答
舉報(bào)