Heim >Backend-Entwicklung >Python-Tutorial >Warum verursacht „counter = 1' innerhalb einer Python-Funktion einen „UnboundLocalError'?

Warum verursacht „counter = 1' innerhalb einer Python-Funktion einen „UnboundLocalError'?

DDD
DDDOriginal
2024-12-26 09:52:14241Durchsuche

Why Does `counter  = 1` Inside a Python Function Cause an `UnboundLocalError`?

UnboundLocalError in Python-Closures erklärt

Die in der Frage beschriebene Situation dreht sich um ein grundlegendes Konzept in Python, das als Variablenbereich bekannt ist. Im Gegensatz zu Sprachen mit expliziten Variablendeklarationen bestimmt Python den Variablenbereich basierend auf der Zuweisung.

Beachten Sie den folgenden Code:

counter = 0

def increment():
  counter += 1

increment()

Dieser Code löst einen UnboundLocalError aus. Warum?

In Python markiert eine Zuweisung innerhalb einer Funktion die Variable als lokal für diese Funktion. Die Zeile counter = 1 in der Funktion increment() impliziert, dass counter eine lokale Variable ist. Diese Zeile versucht jedoch, auf die lokale Variable zuzugreifen, bevor sie zugewiesen wird, was zum UnboundLocalError führt.

Um dieses Problem zu umgehen, haben Sie mehrere Möglichkeiten:

  • Globales Schlüsselwort : Wenn der Zähler eine globale Variable sein soll, stellen Sie seiner Zuweisung das globale Schlüsselwort voran Funktion:
counter = 0

def increment():
  global counter
  counter += 1
  • Nichtlokales Schlüsselwort (Python 3.x): Wenn counter eine lokale Variable in einer übergeordneten Funktion und increment() eine innere Funktion ist , können Sie das Schlüsselwort nonlocal verwenden:
def outer():
  counter = 0

  def inner():
    nonlocal counter
    counter += 1

Durch die Verwendung dieser Techniken können Sie lokale und globale Variablen darin korrekt manipulieren Schließungen, um unnötige Fehler zu vermeiden.

Das obige ist der detaillierte Inhalt vonWarum verursacht „counter = 1' innerhalb einer Python-Funktion einen „UnboundLocalError'?. 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