Para añadir a la respuesta de Alex: aunque cuando se omite la gente del lugar/globals argumentos que DEFAULT para los locales y globales de la persona que llama, esto sólo una hack de conveniencia; lo hace no significa que están heredando el contexto de ejecución completo de la persona que llama. En particular:
a. las celdas de alcance anidadas no están disponibles para el código ejecutado. Entonces esto falla:
def f():
foo= 1
def g():
exec('print foo')
g()
f()
b. global
declaraciones no se transfieren al código ejecutado. De manera predeterminada, como en su ejemplo, las variables escritas se colocan en el diccionario local. Sin embargo, puede hacer que funcione diciendo
exec('global myvar\nmyvar = "changed!"')
Realmente no desea hacer esto si puede evitarlo. global
ya no es bueno y exec
es más o menos un olor a código en sí mismo! No querrás combinarlos a menos que realmente no haya otra alternativa.
¡Perfecto! Gracias, funciona genial :) – linkmaster03