Python Импорт и глобальные переменные - PullRequest
1 голос
/ 14 января 2020

Предположим, у меня есть файл:

# main.py

import foo

my_global = "global variable"
foo.print_global()

и другой:

# foo.py

def print_global():
    global my_global
    print(my_global)

Почему я получаю NameError: name 'my_global' is not defined при запуске main.py, пожалуйста? Как я могу сделать my_global доступным для foo.py? Это плохая идея - возможно, мне всегда следует передавать значения в качестве аргументов функции в такой ситуации?

1 Ответ

2 голосов
/ 14 января 2020

Python не имеет глобальных переменных всего процесса, только глобальные переменные уровня модуля. foo.print_global смотрит на foo.my_global, а не main.my_global, это то, что вы установили. То есть область, которую print_global использует для глобальных переменных, определяется, когда print_global является определенной , а не когда называется .

. вы ожидаете.

import foo

foo.my_global = "global variable"
foo.print_global()

Обратите внимание, что foo.py не должен полагаться на то, что кто-то еще создаст свои глобальные переменные перед вызовом print_global; по крайней мере, foo.py должен инициализировать my_global до None, если не какое-либо другое значение по умолчанию.

Также обратите внимание, что решение выше , а не так же, как

from foo import my_global

my_global = "..."

Это создает новое глобальное имя в текущем модуле, которое инициализировано с использованием текущего значения foo.my_global. Последующее присваивание изменяет имя «локальной» глобальной переменной, а не foo.my_global.

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