Ändern von Variablen in äußeren Bereichen
Das Kapseln von Funktionen ist eine gängige Praxis in Python, stellt jedoch Herausforderungen beim Zugriff auf und beim Ändern von in äußeren Bereichen definierten Variablen dar Bereiche. In diesem Artikel wird untersucht, wie Variablen geändert werden, die nicht global definiert sind, aber in einem umschließenden Bereich existieren.
Python-Bereich und Variablenauflösung
Python folgt dem lexikalischen Bereich, was bedeutet, dass Variablen vorhanden sind basierend auf ihrer Position im Quellcode aufgelöst. Äußere Bereiche (umschließende Funktionen) können auf Variablen zugreifen, die in ihren verschachtelten Bereichen (inneren Funktionen) definiert sind, aber das Gegenteil ist nicht der Fall. Der Versuch, eine Variable in einem äußeren Bereich zu ändern, ohne sie als global zu deklarieren, löst einen UnboundLocalError aus.
Ändern von Variablen des äußeren Bereichs
In Python 3 bietet das Schlüsselwort nonlocal eine Lösung . Es ermöglicht die Änderung von Variablen innerhalb innerer Funktionen, selbst wenn sie in äußeren Bereichen definiert sind. Wenn eine Variable als nicht lokal deklariert ist, geht Python davon aus, dass sie an den äußeren Bereich gebunden ist.
Beispiel:
def outer(): a = 5 def inner(): nonlocal a a += 1 print(a) outer()
Ausgabe:
6
Problemumgehung für Python 2
Für Python 2 gibt es kein direktes Äquivalent zu „nonlocal“. Es ist jedoch möglich, den gleichen Effekt mit veränderlichen Objekten wie Listen oder Wörterbüchern zu erzielen. Durch Ändern des Inhalts des veränderlichen Objekts kann der Wert der Variablen im äußeren Bereich indirekt geändert werden.
Beispiel:
def outer(): a = [] def inner(): a.append(1) inner() inner() print(a)
Ausgabe:
[1, 1]
Durch das Verständnis der Bereichsregeln von Python und die Verwendung der entsprechenden Techniken ist es möglich, auf Variablen in äußeren, nicht-globalen Bereichen zuzugreifen und diese zu ändern, was die Kapselung und Umsetzung erleichtert gewünschtes Programmverhalten.
Das obige ist der detaillierte Inhalt vonWie kann ich Variablen in äußeren Bereichen innerhalb verschachtelter Python-Funktionen ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!