Heim >Backend-Entwicklung >Python-Tutorial >Warum können lokale Variablen in Python 3 nicht direkt durch „exec' aktualisiert werden?

Warum können lokale Variablen in Python 3 nicht direkt durch „exec' aktualisiert werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-20 19:54:12812Durchsuche

Why Can't `exec` Directly Update Local Variables in Python 3?

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!

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