Alex Antwort hinzu: obwohl, wenn auslassen Sie die Einheimischen/Globals Argumente, die sie zu den Einheimischen und Globals des Anrufers Standard, dies ist nur ein Bequemlichkeitshack; es tut nicht bedeutet, dass sie den vollständigen Ausführungskontext des Aufrufers erben. Insbesondere:
a. Zellen mit verschachtelten Bereichen sind für den ausgeführten Code nicht verfügbar. Dies schlägt fehl:
def f():
foo= 1
def g():
exec('print foo')
g()
f()
b. global
Deklarationen werden nicht in den ausgeführten Code übernommen. Standardmäßig werden also wie im Beispiel geschriebene Variablen in das lokale Wörterbuch geschrieben. Allerdings könnten Sie es mit der Aussage
exec('global myvar\nmyvar = "changed!"')
machen
Sie wollen nicht wirklich tun, wenn Sie es helfen können. global
ist schon nicht nett und exec
ist so ziemlich ein Code-Geruch in sich! Sie würden sie nicht kombinieren wollen, es sei denn, es gab wirklich keine Alternative.
Perfekt! Danke, es funktioniert super. :) – linkmaster03