Heim >Backend-Entwicklung >Python-Tutorial >Wie greife ich über verschachtelte Funktionen in Python auf nichtlokale Variablen zu?

Wie greife ich über verschachtelte Funktionen in Python auf nichtlokale Variablen zu?

DDD
DDDOriginal
2024-10-21 18:38:29916Durchsuche

How to Access Nonlocal Variables from Nested Functions in Python?

Zugriff auf nichtlokale Variablen in verschachtelten Funktionsbereichen

In Python ermöglichen verschachtelte Funktionsbereiche den Zugriff auf umschließende Bereiche. Der Versuch, eine Variable in einem umschließenden Bereich innerhalb einer verschachtelten Funktion zu ändern, kann jedoch zu einem UnboundLocalError führen.

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

1. Verwendung des Schlüsselworts „nonlocal“ (Python 3):

Für Python 3 und höher ermöglicht Ihnen das Schlüsselwort „nonlocal“, nichtlokale Variablen innerhalb verschachtelter Funktionen neu zu binden.

<code class="python">def outer():
    ctr = 0

    def inner():
        nonlocal ctr
        ctr += 1

    inner()</code>

2. Indirekter Zugriff über Listen (Python 2 und 3):

In Python 2 und 3 können Sie eine Liste verwenden, um die Variable zu speichern und sie indirekt innerhalb der verschachtelten Funktion zu erhöhen.

<code class="python">ctr = [0]

def inner():
    ctr[0] += 1</code>

3. Verwendung globaler Variablen (nicht empfohlen):

Während die Verwendung von global den Zugriff auf Variablen aus umschließenden Bereichen ermöglichen kann, wird davon aufgrund möglicher Konflikte und Code-Lesbarkeitsproblemen im Allgemeinen abgeraten.

<code class="python">def outer():
    global ctr
    ctr = 0

    def inner():
        ctr += 1</code>

Die Auswahl der geeigneten Lösung hängt von Ihrer spezifischen Python-Version und den Designüberlegungen für Ihren Code ab.

Das obige ist der detaillierte Inhalt vonWie greife ich über verschachtelte Funktionen in Python auf nichtlokale Variablen zu?. 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