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