изменить глобальную переменную среди двух файлов в Python - PullRequest
0 голосов
/ 06 октября 2019

У меня есть два файла Python: сначала test2.py:

a = 1


def func1():
    global a
    print(id(a))
    a += 1

, затем test1.py

from test2 import a, func1

def func0():
    global a
    print(id(a))
    a += 1

func0()

func1()

print(a)

Оказывается, если я запускаю test1.py, результат2, а не 3, который я думал, что должно быть. Я проверяю идентификатор a в двух функциях, и они совпадают.

Я вызвал две функции func0 и func1, почему глобальная переменная только что добавила один раз?

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

Ключевое слово global делает его глобальным для вашего текущего модуля, в вашем случае test1 и test2. При выполнении import это фактически копирует значение в область видимости вашего локального модуля.

Возможно, это проясняет ситуацию, потому что именно так и происходит:

import test2

a = test2.a
a = 123
# what is the value of test2.a? Unchanged, only the local a was changed
0 голосов
/ 06 октября 2019

Во-первых, не используйте глобальные переменные. Во-вторых, оба модуля test1 и test2 имеют отдельные пространства имен. Используйте явную ссылку на модуль test2.

import test2
from test2 import func1

def func0():
    print(id(test2.a))
    test2.a += 1

func0()

func1()

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