Heim >Backend-Entwicklung >Python-Tutorial >Warum verursacht „counter = 1' innerhalb eines Abschlusses einen „UnboundLocalError' in Python?

Warum verursacht „counter = 1' innerhalb eines Abschlusses einen „UnboundLocalError' in Python?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-26 18:09:10795Durchsuche

Why Does `counter  = 1` Inside a Closure Cause an `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:

  1. Verwendung des globalen Schlüsselworts: Wenn die Absicht für ist Wenn Sie möchten, dass counter eine globale Variable ist, kann das Schlüsselwort global innerhalb der Funktion increment() verwendet werden, um explizit zu deklarieren, dass counter auf die globale Variable und nicht auf eine lokale Variable mit derselben verweisen soll name.
counter = 0

def increment():
  global counter
  counter += 1

increment()
  1. Verwendung von nonlocal (nur Python 3.x): In Python 3.x kann das Schlüsselwort nonlocal innerhalb einer verschachtelten Funktion verwendet werden Deklarieren Sie, dass eine Variable als nicht lokal behandelt werden soll, was bedeutet, dass sie auf eine Variable mit demselben Namen in der Umgebung zugreifen kann Geltungsbereich.
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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn