[pyar] return funciones

"Matías A. Bellone" matiasbellone en gmail.com
Jue Mar 14 12:25:36 ART 2013


On 03/14/2013 12:11 PM, Ramiro Floydant wrote:
> A ver si logro entender.
>
> def run(diccionario, *key*): # Le paso los argumentos d(diccionario) y
> 'k' clave del diccionario.
>      while True: # Comienza el loop
>          funcion = diccionario[*key*] # funcion es igual al valor de la
> clave 'k' que sería la función v
>          print "-----------"
>          print funcion.__doc__ # imprimo el docstring de la función v
>          inpt = raw_input("> ")
> *key = *funcion(inpt) # aca llamó a la función v y el resultado que
> devuelve lo guardo en key
>
> run(d, 'k')
>
> Si los comentarios son correctos, lo que no logro entender es por dónde
> vuelve a pasar el resultado almacenado en key por el loop.
>

Una cosa es el bucle (como bien mencionás acá) y otra cosa es el 
argumento de la función cuando la invocás (que fue lo que dijiste 
antes). Cito:

 >2013/3/14 Ramiro Floydant <ramirotrvnt18 en gmail.com>:
 >> Ah, casi me olvido:
 >>
 >> cuando guardo el resultado de funcion() en key, ese valor después
 >> pasa como
 >> argumento de la función run y así sucesivamente?


La corrección que te hicieron fue justamente porque mencionaste la 
invocación de la función «run» luego de asignarle un valor a la variable 
«key». Tu función no vuelve a ejecutarse a sí misma, por lo que eso no 
sucede. Lo que sí sucede es que tu ciclo vuelve a comenzar, 
efectivamente con un nuevo valor en la variable «key», pero no vuelve a 
llamar la función, sólo continúa su ejecución.

Por ejemplo, si tu función fuese algo como sigue:

def prueba(algo, otroalgo):
     print 'algo'
     while True:
          print otroalgo
          otroalgo = otroalgo + 1

Lo que pasaría es que se imprimiría una vez «algo» y luego los números 
comenzando con lo que sea que hayas indicado en el segundo parámetro al 
ejecutar la función.

Tu comentario, en el contexto de esta nueva función, hacía suponer que 
pretendrías que al cambiar valor de «otroalgo» volviera a ejecutar toda 
la función. Esto significa que esperabas que se imprimiera «algo» entre 
cada número en lugar de simplemente continuar ejecutando el ciclo 
imprimiendo números cada vez más y más grandes.

Seguramente este malentendido es debido a que utilizas palabras que 
significan para nosotros algo completamente distinto de lo que realmente 
quisiste decir.

Saludos y sigue aprendiendo!
Toote



More information about the pyar mailing list