Heim >Backend-Entwicklung >Python-Tutorial >Warum verursacht „counter = 1' innerhalb eines Abschlusses einen „UnboundLocalError' in Python?
Den Fehler ungebundener lokaler Variablen in Abschlüssen verstehen
Beim Schreiben von Code mithilfe von Abschlüssen ist es wichtig, den Umfang von Variablen zu berücksichtigen. In diesem speziellen Fall stellt sich die Frage, warum ein UnboundLocalError im folgenden Code auftritt:
counter = 0 def increment(): counter += 1 increment()
Um diese Frage zu beantworten, müssen wir zunächst das Konzept eines Abschlusses in Python verstehen. Ein Abschluss ist eine Funktion, die den Zugriff auf die Variablen behält, die in dem Bereich definiert sind, in dem sie definiert wurde, auch nachdem der Bereich verlassen wurde. In diesem Fall wird die Zählervariable im globalen Bereich definiert und innerhalb der Funktion increment() referenziert, die als Abschluss betrachtet wird.
In Python werden Variablen innerhalb einer Funktion jedoch automatisch als lokale Variablen behandelt sofern nicht ausdrücklich etwas anderes erklärt wird. Wenn der Zeilenzähler = 1 innerhalb von increment() ausgeführt wird, versucht der Interpreter, die lokale Zählervariable zu erhöhen. Da dem Zähler in der Funktion increment() jedoch kein Wert zugewiesen wurde, bleibt er ungebunden. Dies führt dazu, dass der UnboundLocalError ausgelöst wird.
Um dieses Problem zu lösen, gibt es zwei Hauptansätze:
counter = 0 def increment(): global counter counter += 1 increment()
counter = 0 def increment(): nonlocal counter counter += 1 increment()
Das obige ist der detaillierte Inhalt vonWarum verursacht „counter = 1' innerhalb eines Abschlusses einen „UnboundLocalError' in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!