Python: Почему переменные моего модуля теряют свое содержимое? - PullRequest
0 голосов
/ 26 ноября 2018

Пожалуйста, посмотрите на этот «модуль»:

"""Module a"""

a = None
b = None


def gna():
    global a
    if a is None:
        global b
        a = 7
        b = "b"
    print("in a.py: a={}".format(a))
    print("in a.py: b={}".format(b))

Я бы подумал, что вызов gna () из другого модуля инициализирует переменные:

"""Module b"""

from a import a, b, gna

print("in b.py: a={}".format(a))
print("in b.py: b={}".format(b))

gna()

print("in b.py: a={}".format(a))
print("in b.py: b={}".format(b))

Но:

% python3 b.py
in b.py: a=None
in b.py: b=None
in a.py: a=7
in a.py: b=b
in b.py: a=None
in b.py: b=None

И я не понимаю, почему a и b равны None после вызова gna ...

1 Ответ

0 голосов
/ 26 ноября 2018

Как только вы импортируете имя в модуль, оно становится локальным.Вы должны импортировать модуль a вместо импорта переменных a и b из модуля a, чтобы модуль b имел возможность доступа к тем же ссылкам на переменные a и b, значения которых являются функциейgna изменяет:

"""Module b"""

import a

print("in b.py: a={}".format(a.a))
print("in b.py: b={}".format(a.b))

a.gna()

print("in b.py: a={}".format(a.a))
print("in b.py: b={}".format(a.b))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...