Heim  >  Artikel  >  Backend-Entwicklung  >  Können verschachtelte Funktionen Variablen in einschließenden Bereichen in Python ändern?

Können verschachtelte Funktionen Variablen in einschließenden Bereichen in Python ändern?

Susan Sarandon
Susan SarandonOriginal
2024-10-21 18:40:03350Durchsuche

Can Nested Functions Modify Variables in Enclosing Scopes in Python?

Ungebundene lokale Variablen in verschachtelten Funktionsbereichen

In Python greifen verschachtelte Funktionen auf Variablen zu, die in ihren umschließenden Bereichen definiert sind, was die Wiederverwendung und Kapselung von Code ermöglicht. Der Versuch, eine Variable in einem umschließenden Bereich innerhalb einer verschachtelten Funktion zu ändern, kann jedoch zu einem „UnboundLocalError“ führen, wenn die Variable nicht als nicht lokal oder global deklariert ist.

Beachten Sie den folgenden Code:

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

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

Wenn Sie inner() aufrufen, wird ein „UnboundLocalError“ angezeigt, da ctr nicht in der inneren Funktion definiert ist. Um dies zu beheben, können Sie die folgenden Ansätze verwenden:

Für Python 3 und höher:

Verwenden Sie das Schlüsselwort „nonlocal“

Das Schlüsselwort „nonlocal“ ermöglicht dies um Variablen, die in einem umschließenden Bereich definiert sind, innerhalb einer verschachtelten Funktion zu ändern.

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

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

Für Python 2 und früher:

Verwenden Sie eine Datenstruktur, um die Variable zu speichern

In Python 2 können verschachtelte Funktionen keine Variablen in umschließenden Bereichen ändern. Sie müssen daher eine Datenstruktur verwenden, um die Variable zu speichern und an die verschachtelte Funktion zu übergeben.

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

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

Ersetzen Sie alle Vorkommen von ctr in Ihrem Code mit ctr[0].

Das obige ist der detaillierte Inhalt vonKönnen verschachtelte Funktionen Variablen in einschließenden Bereichen in Python ändern?. 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