Wie funktionieren globale Variablen in Python? Ich weiß, dass globale Variablen böse sind, ich experimentiere nur.
Dies funktioniert nicht in Python:
G = None
def foo():
if G is None:
G = 1
foo()
Ich erhalte einen Fehler:
UnboundLocalError: local variable "G" referenced before assignment
Was mache ich falsch?
Antworten:
58 für die Antwort № 1Du brauchst das global
Erklärung:
def foo():
global G
if G is None:
G = 1
In Python Variablen das Sie zuweisen werden standardmäßig zu lokalen Variablen. Sie müssen verwenden global
um sie als globale Variablen zu deklarieren. Auf der anderen Seite Variablen, die Sie beziehen sich aber nicht auf werden nicht automatisch zu lokalen Variablen. Diese Variablen beziehen sich auf die nächste Variable in einem einschließenden Bereich.
Python 3.x führt die nonlocal
Aussage, die analog ist global
, bindet jedoch die Variable an den nächstliegenden umschließenden Bereich. Zum Beispiel:
def foo():
x = 5
def bar():
nonlocal x
x = x * 2
bar()
return x
Diese Funktion gibt bei Aufruf 10 zurück.
8 für die Antwort № 2
Sie müssen erklären G
wie global
, aber wie, warum: wann immer Sie sich auf eine Variable innerhalb einer Funktion beziehen, wenn Sie einstellen Als Variable an einer beliebigen Stelle in dieser Funktion nimmt Python an, dass es sich um eine lokale Variable handelt. Wenn also keine lokale Variable mit diesem Namen an dieser Stelle im Code vorhanden ist, erhalten Sie die UnboundLocalError
. Wenn Sie, wie in Ihrer Frage, tatsächlich auf eine globale Variable verweisen wollten, benötigen Sie das global
Schlüsselwort, um Python das zu sagen, was Sie meinten.
Wenn Sie der Variablen nicht irgendwo in der Funktion zuweisen, sondern nur auf ihren Wert zugreifen, verwendet Python die globale Variable mit diesem Namen, sofern vorhanden.
G = None
def foo():
if G is None:
print G
foo()
Dieser Code wird gedruckt None
und wirft den UnboundLocalError nicht.
6 für die Antwort № 3
Sie müssen G innerhalb dieser Funktion immer noch als global deklarieren:
G = None
def foo():
global G
if G is None:
G = 1
foo()
print G
was einfach ausgibt
1
2 für die Antwort № 4
Definiere G als global in der Funktion wie folgt:
#!/usr/bin/python
G = None;
def foo():
global G
if G is None:
G = 1;
print G;
foo();
Die obigen Python-Drucke 1
.
Die Verwendung globaler Variablen ist eine schlechte Praxis, weil: http://c2.com/cgi/wiki?GlobalVariablesAreBad