Wenn Sie angeben, dass eine Variable global ist, wird sie nicht für Sie erstellt (sofern sie nicht bereits existiert). Was macht die globale Anweisung eigentlich mit der Variablen? Es modifiziert es offensichtlich nicht nur, da es nicht existieren muss, um es zu modifizieren. Sobald dies den Gültigkeitsbereich verlässt, kannWo leben deklarierte, aber nicht definierte globale Variablen in 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
Dies wirft auch einen Fehler (nicht überraschend):
def foo():
global cat, dog
dog = 1
def bar():
cat = 2
foo()
bar()
print(dog)
print(cat) # => NameError
So offensichtlich die globale Modifikator nur im Rahmen der Funktion arbeitet ausgeführt wird. Wird dies in irgendeiner Weise durch den Müllsammler verursacht? Gibt es ein Phantom-Globalisierungsobjekt, das auf die Erstellung eines Objekts mit dem angegebenen Namen wartet und am Ende der Funktion geklärt wird?
Richtig, aber vor dem Zuweisen von Hund zu einem Wert, gab es keine Fälle von Hund. – Goodies
Mein Punkt ist, dass es offensichtlich nicht direkt den Hund verändert, weil der Hund vor der globalen Aussage nicht existiert. Sie können etwas nicht modifizieren, das nicht existiert. – Goodies
Der Müllsammler hat nichts damit zu tun. 'global' erzeugt die Variable nicht. Wenn Sie "" cat "in globals()' innerhalb des 'foo()' überprüfen, antwortet es mit false. – gdlmx