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.

¿Cómo funcionan realmente las funciones definidas por el usuario en Python?

Soy nuevo en python y estaba jugando con ejemplos de trabajo en el libro de texto de http://do1.dr-chuck.com/pythonlearn/EN_us/pythonlearn.pdf, sección 4.9 funciones definidas por el usuario. Me confundí en el camino.

(Me dirigieron al enlace https://stackoverflow.com/questions/291978/short-description-of-the-scoping-rules pero encontré que todas las respuestas eran demasiado avanzadas para mi pregunta de nivel principiante)

Cuando el código en la ronda 0 era:

bruce = input(“por favor ingresa lo que se imprimirá 2 veces”)
def printTwice(bruce):
print(bruce)
print(bruce)
printTwice(“alfa”)

Independientemente de la entrada que diera, siempre salía como “alfa”. Vale, entiendo, “alfa” se establece como el valor de “bruce” aquí.

Ronda 1:

bruce = input(“por favor ingresa lo que se imprimirá 2 veces”) #para ingresar “hola”
not1 = 123
def printTwice(not1): #se establece el parámetro como not1, not1 se establece como 123, pero el resultado es lo que se ingresó en la entrada
print(bruce)
print(bruce)
printTwice(“a”)

El resultado resulta ser lo que se ingrese para bruce, por ejemplo “hola”

P: ¿Por qué ignora los argumentos “a” y “not1” y toma la entrada “hola” para bruce?

Ronda 2: #Ya que vi que python no estaba prestando atención a lo que le pedía que hiciera, eliminé las comillas para “a”, por lo que quedaría a

bruce = input(“por favor ingresa lo que se imprimirá 2 veces”)
not1 = 123
def printTwice(not1): #se establece el parámetro como not1, not1 se establece como 123, pero el resultado es lo que se ingresó en la entrada
print(bruce)
print(bruce)
printTwice(a) # el argumento ahora no tiene comillas

Resultado: NameError: name ‘a’ is not defined.
P: ¿Por qué ahora se preocupa por lo que coloqué entre paréntesis esta vez pero no en la ronda 0 ni en la ronda 1?

Entiendo que mi pregunta es de nivel principiante y tal vez esté duplicada en algún otro lugar, si es así, por favor señáleme al enlace correcto. ¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    En la Ronda 0, el argumento “alpha” se pasa directamente a la función printTwice(). Por lo tanto, el valor del parámetro bruce es reemplazado por “alpha” dentro de la función y el resultado es la impresión de “alpha” dos veces.

    En la Ronda 1, el parámetro de la función not1 se establece en 123, pero dentro de la función se imprime bruce en lugar de not1. Esto se debe a que bruce es una variable global y la función accede a ella desde el alcance global. El valor de bruce es establecido por la entrada del usuario, que en este caso es “hello”.

    En la Ronda 2, el argumento pasado a la función printTwice() no está entre comillas. Por lo tanto, Python trata de encontrar una variable con el nombre “a” y pasar su valor como argumento. Sin embargo, no hay una variable llamada “a” definida en el código, por lo que se produce un error de Nombre.

    En resumen, utilizar el mismo nombre para un parámetro de función y una variable global puede causar confusión y un comportamiento inesperado. Es mejor utilizar nombres diferentes o pasar argumentos de forma explícita.

Comments are closed.