В предисловии, я думаю, я, возможно, понял, как заставить этот код работать (на основе Изменение переменных модуля после импорта), но мой вопрос действительно о том, почему происходит следующее поведение, поэтому я могу понять, чего не делать в будущем.
У меня есть три файла. Первый - 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__
версии mod1.py
вместо переменных в версии, импортированной с помощью mod2.py
?