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
.