Wstępnie, myślę, że mogłem wymyślić, jak uzyskać ten kod działa (na podstawie Changing module variables after import), ale moje pytanie jest naprawdę o tym, dlaczego następujące zachowanie występuje, więc mogę zrozumieć, co do nie robić w przyszłości.Importowanie modułów: __main__ vs import jako moduł
Mam trzy pliki. Pierwszym z nich jest 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()
Następny mam mod2.py:
# mod2.py
import mod1
def func2():
mod1.func1B()
Wreszcie mam driver.py:
# driver.py
import mod1
if __name__ == '__main__':
mod1.func1A()
Gdybym wykonać polecenie python mod1.py
wówczas wyjście to None
. W oparciu o link, który wymieniłem powyżej, wydaje się, że istnieje pewne rozróżnienie między importowaniem mod1.py
jako __main__
i mod1.py
importowanych z mod2.py
. Dlatego stworzyłem driver.py
. Jeśli wykonam polecenie python driver.py
, otrzymam oczekiwane wyjście: A
. W pewnym sensie widzę różnicę, ale tak naprawdę nie widzę mechanizmu ani przyczyny. Jak i dlaczego tak się dzieje? Wydaje się sprzeczne z intuicją, że ten sam moduł istniałby dwa razy. Jeśli wykonam python mod1.py
, czy będzie możliwe uzyskanie dostępu do zmiennych w wersji __main__
zamiast zmiennych w wersji zaimportowanej przez mod2.py
?
Będziesz robił sobie przysługę, jeśli chcesz zrezygnować z okrężnego importu. – eryksun