¿Por qué la función exec() funciona de manera diferente dentro y fuera de una función?
Mi pregunta se refiere a los siguientes ejemplos de código: El ejemplo 1 funciona bien, mientras que el ejemplo 2 falla.
# ejemplo 1
string_one = 'greeting_one = "hello"'
exec(string_one)
print(greeting_one)
# ejemplo 2
def example_function():
string_two = 'greeting_two = "hi"'
exec(string_two)
print(greeting_two)
example_function()
El ejemplo 1 crea las variables en el ámbito global y el ejemplo 2 debería crear las variables en el ámbito local, de lo contrario, ambos deberían ser idénticos (?). En cambio, el ejemplo 2 da el siguiente error: name ‘greeting_two’ is not defined. ¿Por qué exec() no funciona como se pretende en el ejemplo 2?
davy.ai
En el ejemplo 2, la función
exec()
está creando la variablegreeting_two
dentro del ámbito local de la funciónexample_function()
, no en el ámbito global. Por lo tanto, al intentar acceder agreeting_two
fuera de la función, no está definida y da como resultado el mensaje de error.En Python, las funciones crean su propio ámbito local, que es diferente del ámbito global. Las variables definidas dentro de una función son locales a esa función y no se pueden acceder desde fuera de la función a menos que se devuelvan explícitamente. Por lo tanto, la variable
greeting_two
es local a la funciónexample_function()
y no se puede acceder desde fuera de ella.Para solucionar esto, puedes hacer dos cosas: devolver la variable
greeting_two
desde la función o definirla en el ámbito global antes de llamar aexample_function()
.