Первое, что я заметил в вашем коде, это
global var
в первой строке.В питоне это не нужно.Любая переменная, объявленная в глобальной области видимости, автоматически становится глобальной.Вам понадобится только ключевое слово global внутри функции, которая хочет изменить глобальную переменную.
Еще одна вещь, которую вам нужно знать о python, это то, что глобальная переменная является глобальной только для этого конкретного файла.Он не переносится на другие модули.
Итак, теперь: как вы делаете то, что хотите сделать.
Единственный реальный способ сохранить состояние такого рода между модулями, я думаю, это использовать какой-то контейнер.Я буду использовать класс, но я уверен, что такие вещи, как dict или список, будут работать нормально.Таким образом, вы также не сильно портите глобальную область видимости, вы можете сделать это для нескольких переменных в одном контейнере, и вам не нужны глобальные ключевые слова.Это так, потому что, импортируя test1 из test2, вы бы снова установили var в 0, так как весь модуль test1 выполняется снова.Решается путем помещения этого общего контейнера в третий модуль, импортированный как из test1, так и из test2.Я назвал этот модуль "общим".Код будет выглядеть следующим образом:
test1.py:
from test2 import func2
from shared import SharedContainer
def func1():
print("The updated value of var is: {}".format(SharedContainer.var))
# after the updated value perform some operation on var
SharedContainer.var = SharedContainer.var*2
def func3():
print("The final value of var is: {}".format(SharedContainer.var))
if __name__ == "__main__":
func2()
func3()
test2.py
from shared import SharedContainer
def func2():
from test1 import func1
print("The initial value of var is: {}".format(SharedContainer.var))
SharedContainer.var = 2+3
func1()
shared.py
class SharedContainer:
var = 0
Надеюсь, это поможет:)