Per prefigurare, penso di aver capito come far funzionare questo codice (basato su Changing module variables after import), ma la mia domanda riguarda davvero il seguente comportamento, quindi posso capire cosa non fare in futuro.Importazione moduli: __main__ vs import come modulo
Ho tre file. Il primo è 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()
successivo ho mod2.py:
# mod2.py
import mod1
def func2():
mod1.func1B()
Finalmente ho driver.py:
# driver.py
import mod1
if __name__ == '__main__':
mod1.func1A()
Se eseguo il comando python mod1.py
poi il l'output è None
. Sulla base del collegamento a cui ho fatto riferimento sopra, sembra che ci sia una certa distinzione tra mod1.py
importato come __main__
e mod1.py
importato da mod2.py
. Pertanto, ho creato driver.py
. Se eseguo il comando python driver.py
, ottengo l'output previsto: A
. In un certo senso vedo la differenza, ma non vedo davvero il meccanismo o il motivo. Come e perché accade questo? Sembra controintuitivo che lo stesso modulo esisterebbe due volte. Se eseguo python mod1.py
, sarebbe possibile accedere alle variabili nella versione __main__
di mod1.py
invece delle variabili nella versione importata da mod2.py
?
Ti farai un favore se rifattori di eliminare l'importazione circolare. – eryksun