Heim  >  Artikel  >  Backend-Entwicklung  >  Wie behebe ich UnboundLocalError in verschachtelten Funktionsbereichen in Python?

Wie behebe ich UnboundLocalError in verschachtelten Funktionsbereichen in Python?

Susan Sarandon
Susan SarandonOriginal
2024-10-21 18:45:02989Durchsuche

How to Resolve UnboundLocalError in Nested Function Scopes 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 das

eingefü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!

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