Wie lokale Variablen nicht direkt mit exec aktualisiert werden können
Der exec-Aufruf in Python ist ein leistungsstarkes Tool zum dynamischen Ausführen von Code, aber Es gibt Einschränkungen hinsichtlich der Änderung lokaler Variablen.
Beachten Sie Folgendes Code:
def f(): a = 1 exec("a = 3") print(a) f()
Man könnte erwarten, dass dieser Code 3 ausgibt, aber tatsächlich gibt er 1 aus. Dies liegt daran, dass in Python 3 lokale Variablen nicht in einem Wörterbuch gespeichert werden, sondern in einem Array mit Indizes, die beim Kompilieren bestimmt werden Zeit. Die exec-Funktion kann lokale Variablen nicht sicher ändern, ohne diese Optimierung zu beeinträchtigen.
Lösung: Lokales Wörterbuch mit exec verwenden
Um lokale Variablen mit exec zu ändern, benötigen Sie um explizit ein lokales Wörterbuch zu übergeben. Zum Beispiel:
def foo(): ldict = {} exec("a = 3", globals(), ldict) a = ldict['a'] print(a)
Dadurch wird der Code im lokalen Wörterbuch (ldict) ausgeführt, das sich vom lokalen Variablenarray der Funktion unterscheidet. Die geänderte Variable kann dann durch Zugriff auf das lokale Wörterbuch in den Gültigkeitsbereich der Funktion zurückgegeben werden.
Python 2-Verhalten
In Python 2 konnte exec lokale Variablen ändern, ohne eine zu übergeben explizites Wörterbuch, weil es Namespaces, die exec ohne globale/lokale Argumente verwendeten, als „nicht optimiert“ behandelte. Dies ist jedoch in Python 3 nicht der Fall.
Daher ist es wichtig zu bedenken, dass bei Verwendung von exec lokale Variablen nur durch Erstellen und Übergeben eines lokalen Wörterbuchs aktualisiert werden können, um mögliche Konflikte mit den Optimierungen des Compilers zu vermeiden .
Das obige ist der detaillierte Inhalt vonWarum können lokale Variablen in Python 3 nicht direkt durch „exec' aktualisiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!