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
Linda HamiltonOriginal
2024-12-14 20:20:11793Durchsuche

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()

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)

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!

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