Как получить переменную, объявленную в test1.py в test2.py, выполнить некоторую операцию над переменной var в test2.py и получить обновленное значение переменной var в test1.py? - PullRequest
1 голос
/ 06 апреля 2019

Присвоение значения глобальной переменной Например:

test1.py:

global var
var= 0  

def func1():
    print("The updated value of var is :"+var)
    #after the updated value perform some operation on var
    var=var*2  

def func3():
    global var
    print("The final value of var is :"+var)    

test2.py:

from test1 import *
def func2():
    global var
    print("The initial value of var is :"+var)
    var = 2+3
    func1()

Я намереваюсь получить следующеезначения var:

начальное значение var в func1 test2.py: 0

обновленное значение var в func2 test1.py: 5

финальное значениезначение var в func3 test1.py: 10

1 Ответ

0 голосов
/ 06 апреля 2019

Первое, что я заметил в вашем коде, это

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

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...