Heim >Backend-Entwicklung >Python-Tutorial >Wie behebe ich UnboundLocalError in verschachtelten Funktionsbereichen in Python?
UnboundLocalError in verschachtelten Funktionsbereichen
In Python kann der Zugriff auf eine in einer äußeren Funktion definierte Variable von einer verschachtelten Funktion aus manchmal zu einem UnboundLocalError. Betrachten Sie das folgende Beispiel:
<code class="python">def outer(): ctr = 0 def inner(): ctr += 1 inner()</code>Das Ausführen dieses Codes löst einen
UnboundLocalError für die Variable ctr in der inneren Funktion aus. Dieser Fehler tritt auf, weil Python ctr als lokale Variable innerhalb der inneren Funktion behandelt, obwohl sie in der äußeren Funktion definiert ist. Um dieses Problem zu lösen, müssen wir einen Mechanismus verwenden, der es der inneren Funktion ermöglicht, auf den Umfang der äußeren Funktion zuzugreifen.
Lösung:
Python 3 hat daseingeführt nonlocal-Anweisung, die die nichtlokale Variablenänderung zulässt. Indem wir nonlocal zur inneren Funktion hinzufügen, deklarieren wir ctr explizit als nicht-lokale Variable und ermöglichen so die erneute Bindung innerhalb der inneren Funktion.
<code class="python">def outer(): ctr = 0 def inner(): nonlocal ctr ctr += 1 inner()</code>Alternativ in Python 2, dem das nonlocal
-Anweisung können wir dieses Problem umgehen, indem wir die Zählervariable in eine Liste oder eine andere Datenstruktur einschließen, um eine Neubindung von Barnamen zu vermeiden:
Dieser Ansatz behält den Wert von ctr innerhalb der Liste bei ctr, um zu verhindern, dass der<code class="python">ctr = [0] def inner(): ctr[0] += 1</code>UnboundLocalError
auftritt.
Das obige ist der detaillierte Inhalt vonWie behebe ich UnboundLocalError in verschachtelten Funktionsbereichen in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!