Ändern von Variablen in nicht-globalen, einschließenden Bereichen in Python
Bei der Arbeit mit verschachtelten Funktionen ist es oft notwendig, auf definierte Variablen zuzugreifen und diese zu ändern in einem umschließenden Bereich, der weder global noch durch dynamisches Scoping zugänglich ist. Dies kann in Python, das lexikalisches Scoping implementiert, zu Herausforderungen führen.
Betrachten Sie das folgende Beispiel:
def A(): b = 1 def B(): # Can access 'b' but cannot modify it directly print(b) B() A()
In diesem Code ist die Variable b im umschließenden Gültigkeitsbereich von B() definiert. Funktion. Der Versuch, b direkt in B() zu ändern, führt jedoch zu einem UnboundLocalError, da es nicht als lokal für B() deklariert ist.
Um dieses Problem zu beheben, bietet Python zwei Lösungen an:
Python 3:Verwenden Sie das Schlüsselwort „nonlocal“
In Python 3 können Sie mit dem Schlüsselwort „nonlocal“ Variablen in ändern Nächster umschließender Bereich ohne Globals. So verwenden Sie es:
def foo(): a = 1 def bar(): nonlocal a a = 2 bar() print(a) # Output: 2
In diesem Beispiel macht das Schlüsselwort nonlocal eine nicht-lokale Variable innerhalb der bar()-Funktion und ermöglicht so deren Änderung.
Python 2 :Verwenden Sie veränderliche Objekte
Auf Python 2, wo nichtlokal nicht verfügbar ist, können Sie veränderliche Objekte verwenden, z als Listen oder Wörterbücher. Anstatt Variablen neu zuzuweisen, können Sie den Wert des Objekts ändern:
def foo(): a = [] def bar(): a.append(1) bar() bar() print(a) # Output: [1, 1]
Hier ist die Variable a veränderbar und die Funktion bar() kann ihre Werte durch Anhängen an die Liste ändern.
Das obige ist der detaillierte Inhalt vonWie kann ich Variablen in einem nicht-globalen, umschließenden Bereich in Python ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!