Hago ejercicio en Learn Python de la manera difícil, y estoy teniendo un momento muy difícil envolviendo mi cerebro en torno al hecho de que todo depende de que una función se ejecute solo porque se ha asignado como un valor a un variable. Escribí un pequeño script para confirmar que se trata de cómo funciona, y lo hace:¿Por qué foo = function() ejecuta la función en Python?
def pants():
print "Put on some pants!"
def shorts():
print "And don't forget your underwear!"
zap = pants()
thing = shorts()
cuyos resultados serán:
Put on some pants!
And don't forget your underwear!
Así que, obviamente esto sucede, pero no puedo entender por qué el lenguaje funciona de esa manera: cuál es la lógica detrás del lenguaje que hace que esta sea una forma valiosa de operar. Creo que sería útil para mí entender por qué esto es, en lugar de simplemente "así es como funciona".
Para mayor claridad: Pregunto (supongo) por qué la función se está ejecutando, cuando todo lo que hago es asignarla como un valor para algo. Las instrucciones de impresión están allí, así que puedo ver que la función realmente está ejecutándose.
Es el hecho de que no soy en realidad nunca se ejecuta
pantalones() cortos()
que me está confundiendo.
Para crear una analogía torturado, si me-hornear galletas en casa eran "cookies()", y que eran para hacer las galletas de los sábados, que con el tiempo pueda creer que
sábado = galletas()
pero sólo pensando "bueno, el sábado es el día de la galleta" no es lo mismo que galletas que cuecen realidad ... ¿por qué no simplemente decir
sábado cookies (=)
realidad hornear el co okies, en lugar de simplemente configurar el sábado con la variable "cookies()" para un uso posterior?
Probablemente se esté confundiendo '' print' con return'. – JJJ
Creo que Juhana podría tener razón. ¿Estás esperando que 'zap' tenga un valor de "Ponte unos pantalones"? Si es así, cambie 'print' a 'return' y luego 'print zap' después de haber sido asignado. – chooban
Sí, claramente sus expectativas están desalineadas con el idioma. ¿Que estabas esperando? –