Heim > Backend-Entwicklung > Python-Tutorial > Warum aktualisiert exec lokale Variablen in Python 3 nicht und wie kann ich das beheben?

Warum aktualisiert exec lokale Variablen in Python 3 nicht und wie kann ich das beheben?

Linda Hamilton
Freigeben: 2024-12-14 20:20:11
Original
789 Leute haben es durchsucht

Why Doesn't exec Update Local Variables in Python 3, and How Can I Fix It?

So aktualisieren Sie lokale Variablen mit exec in Python 3

Problem:

Bei Verwendung von exec in Python 3 zum Ausführen Eine Codezeichenfolge innerhalb einer Funktion. Lokale Variablen innerhalb der Funktion werden nicht aktualisiert. Dieses Problem entsteht aufgrund der effizienten Optimierung des lokalen Variablenspeichers durch Python 3.

Beispiel:

def f():
    a = 1
    exec("a = 3")
    print(a)

f()
Nach dem Login kopieren

Dieser Code soll 3 ausgeben, gibt aber stattdessen 1 aus.

Lösung:

Um lokale Variablen mit exec zu ändern, Es muss ein explizites lokales Wörterbuch übergeben werden. Dies kann wie folgt erreicht werden:

def foo():
    ldict = {}
    exec("a = 3", globals(), ldict)
    a = ldict['a']
    print(a)
Nach dem Login kopieren

Erklärung:

Python 3 speichert lokale Variablen in einem Array, um deren Zugriff zu optimieren. Das Standardverhalten von exec lässt jedoch keine Änderung lokaler Variablen zu. Durch Übergabe eines expliziten lokalen Wörterbuchs können die Variablen dem Wörterbuch zugewiesen werden und über dieses auf ihre geänderten Werte zugegriffen werden.

Python 2 vs. Python 3:

In Python 2 funktionierte dieses Verhalten wie erwartet aufgrund eines Optimierungsmechanismus, der es Funktionen mit exec ermöglichte, über einen nicht optimierten lokalen Variablenspeicher zu verfügen. In Python 3 ist diese Optimierung jedoch nicht mehr möglich, was zu dem beobachteten Verhalten führt.

Hinweis:

Es ist wichtig zu bedenken, dass die Übergabe eines expliziten lokalen Wörterbuchs erfolgen sollte Dies sollte nur bei Bedarf durchgeführt werden, da dadurch der Optimierungsvorteil, den die Standardverarbeitung lokaler Variablen in Python 3 bietet, entfällt.

Das obige ist der detaillierte Inhalt vonWarum aktualisiert exec lokale Variablen in Python 3 nicht und wie kann ich das beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage