Когда вы указываете, что переменная является глобальной, она не создает ее для вас (если она еще не существует). Что делает глобальный оператор на самом деле делать с переменной? Очевидно, он не просто модифицирует его, поскольку он не должен существовать для его модификации. После того, как это выходит из области видимости, можетГде живут объявленные, но неопределенные глобальные переменные в Python?
def foo():
global cat, dog
dog = 1
foo()
print('dog' in globals()) # => True
print(dog) # => 1
print('cat' in globals()) # => False
print(cat) # => NameError
Это также вызывает ошибку (не удивительно):
def foo():
global cat, dog
dog = 1
def bar():
cat = 2
foo()
bar()
print(dog)
print(cat) # => NameError
Так, очевидно, глобальный модификатор работает только в пределах области видимости функции выполняется. Это, в любом случае, вызвано сборщиком мусора? Есть ли какой-то фантомный объект глобализатора, который ждет создания объекта с заданным именем и будет очищен в конце функции?
Правильно, но до назначения собаки на значение не было никаких случаев собаки. – Goodies
Моя точка зрения заключается в том, что она явно не модифицирует собаку, потому что собака не существует до глобального утверждения. Вы не можете изменить то, что не существует. – Goodies
Сборщик мусора не имеет к этому никакого отношения. 'global' просто не создает переменную. Если вы проверите '' cat 'в globals() 'внутри' foo() ', он ответит false. – gdlmx