es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    En el ejemplo 2, la función exec() está creando la variable greeting_two dentro del ámbito local de la función example_function(), no en el ámbito global. Por lo tanto, al intentar acceder a greeting_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ón example_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 a example_function().

Comments are closed.