„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Aktualisiert `exec ()` lokale Variablen in Python 3 und wenn nicht, wie kann es dazu gebracht werden?

Aktualisiert `exec ()` lokale Variablen in Python 3 und wenn nicht, wie kann es dazu gebracht werden?

Gepostet am 2025-02-19
Durchsuche:547

Does `exec()` Update Local Variables in Python 3, and If Not, How Can It Be Made To?

The Python 3 Dilemma

In Python 3 kann der folgende Code -Snippet eine lokale Variable nicht erwarten: def f (): a = 1 exec ("a = 3") print (a)

anstelle des erwarteten '3', es druckt alarmierend '1'!

def f():
    a = 1
    exec("a = 3")
    print(a)
das python 2 Behavior

seltsamerweise, die Der gleiche Code in Python 2 würde tatsächlich die lokale Variable aktualisieren und '3' drucken. Diese Ungleichheit ergibt sich aus einer grundlegenden Änderung in der Art und Weise, wie Python lokale Variablen umgeht. zur Kompilierungszeit. Diese Effizienz ist Kosten für die Verbot von Laufzeitänderungen an die Einheimischen. Daher kann der Standard -Ausführungsaufruf in Python 3 die lokalen Variablen nicht erfolgreich verändern.

die Magie der Lokale ()

, um diese Einschränkung zu umgehen und lokale Variablen zu aktualisieren, muss man muss Übergeben Sie ausdrücklich ein Einheimisches -Wörterbuch an Exec. Dieses Wörterbuch speichert die aktualisierten lokalen Variablen nach der Ausführung des dynamischen Code. Der überarbeitete Code sieht so aus: def foo (): ldict = {} exec ("a = 3", globals (), ldict) a = ldict ['a'] print (a)

Implikationen für exec ()

Die Python 3 -Dokumentation warn unvorhersehbares Verhalten. Aus Sicherheitsgründen sollte man immer ein explizites Einheimische wortswörterbücher an die Ausführung weitergeben, wenn es beabsichtigt, lokale Variablen zu aktualisieren. Der Fehlerbericht zeigt, dass die Optimierung von Python 3 für lokale Variablen zum aktuellen Verhalten führte. Der Compiler, der nicht in der Lage ist, benutzerdefinierte Exec -Funktionen von Pythons eigenen zu unterscheiden, kann ihnen keine besondere Behandlung anbieten. Daher kann der Standard -Exec nicht die Einheimischen ändern.

python 2s Ausnahme
def f():
    a = 1
    exec("a = 3")
    print(a)

In Python 2 funktionierten die alte Aussageaussage anders. Es ermöglichte die dynamische Änderung der lokalen Variablen aufgrund der besonderen Umstellung des Compiler des integrierten Execs. Änderung des Ansatzes zur Änderung lokaler Variablen. Durch die Verwendung eines expliziten Einheimischen Wörterbuchs können Entwickler die Leistung der dynamischen Codeausführung nutzen und gleichzeitig die Kontrolle über ihre lokalen Variablen beibehalten.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3