爲了序言,我想我可能已經想出瞭如何讓代碼工作(基於Changing module variables after import),但我的問題是關於爲什麼發生以下行爲,所以我可以理解什麼今後不做。導入模塊:__main__ vs導入爲模塊
我有三個文件。首先是mod1.py:
# mod1.py
import mod2
var1A = None
def func1A():
global var1
var1 = 'A'
mod2.func2()
def func1B():
global var1
print var1
if __name__ == '__main__':
func1A()
接下來我有mod2.py:
# mod2.py
import mod1
def func2():
mod1.func1B()
最後我有driver.py:
# driver.py
import mod1
if __name__ == '__main__':
mod1.func1A()
如果我執行命令python mod1.py
,則輸出是None
。根據上面提到的鏈接,似乎mod1.py
被導入爲__main__
和mod1.py
從mod2.py
導入。因此,我創建了driver.py
。如果我執行命令python driver.py
然後我得到預期的輸出:A
。我有點看出了區別,但我並沒有真正看到它的機制或原因。如何以及爲何發生這種情況?這似乎違反直覺,相同的模塊會存在兩次。如果我執行python mod1.py
,是否可以訪問版本的__main__
版本中的變量,而不是由mod2.py
導入的版本中的變量?
如果您重構以消除循環導入,您將爲自己做個忙。 – eryksun