Dieser Artikel basiert auf den Ergebnissen von Python 3.7.6.
Um einen Abschluss in Python zu machen, habe ich den folgenden Code geschrieben.
def f():
x = 0
def g():
x += 1
g()
f()
Die Funktion "g" bezieht sich auf die Variable "x", die im Rahmen der Funktion "f" definiert ist, und versucht, 1 hinzuzufügen. Dies führt zu einem Fehler bei "x + = 1".
UnboundLocalError: local variable 'x' referenced before assignment
Es heißt, dass die lokale Variable "x" vor der Zuweisung referenziert wurde. Dies liegt daran, dass wir eine weitere neue Variable in "g" erstellt haben, anstatt auf "x" in "f" zu verweisen.
Der obige Code kann zur Vereinfachung der Deklaration und Zuweisung wie folgt separat umgeschrieben werden. Es verwendet var
als Pseudosyntax für die Variablendeklaration.
#Hinweis:var ist nicht die richtige Python-Syntax. Siehe oben
def f():
var x #lokale Variable von f'x'Erklären
x = 0 #Ersetzen Sie x durch 0
def g(): #Definieren Sie die interne Funktion g von f
var x #lokale Variable von g'x'Erklären
#Es kommt vor, dass f auch eine Variable mit demselben Namen hat, aber eine andere Variable
x += 1 #Addiere 1 zu x(x = x +1 Zuckerüberzugssyntax)
#Versuche, vor dem Hinzufügen auf den Wert zu verweisen, aber ein Fehler, da er noch nicht zugewiesen wurde
g()
Um die ursprüngliche Absicht auszudrücken, schreiben Sie wie folgt.
def f():
x = 0
def g():
nonlocal x ## (*)
x += 1
g()
Fügen Sie nonlocal
hinzu, wie (*)
. Dies sucht nach "x", das im äußeren Bereich definiert ist (eines außerhalb von "g" = "f").