[pyar] Funciones lambdas dentro de for

Daniel Moisset dmoisset en machinalis.com
Mie Sep 24 12:55:20 ART 2014


A ver, la funcion lambda se crea en cada vuelta del for, pero no importa,
porque lo que importa es que sucede cuando haces la llamada. Tu situacion
es muy muy parecida a esto:

i = 1
def funcion():
    print i
i = 2
i = 3
funcion()

el programa este imprime "3". si bien la funcion se definio cuando i era 1,
el valor de i es 3 en el momento en que se *invoca* la función. Y el codigo
de la funcion lo que dice es "ok, busquemos el valor actual de la global i.
ok, y ahora lo mostramos en la pantalla". El *valor* de i no se usa nunca
para definir la funcion.

Lo mismo pasa en tu codigo, pero en vez de un "def ..." es un "lambda..."

Saludos,
   D.



2014-09-24 12:49 GMT-03:00 Manuel Kaufmann <humitos en gmail.com>:

> 2014-09-24 12:41 GMT-03:00 Daniel Moisset <dmoisset en machinalis.com>:
> > porque i es una sola variable (en tu caso gloabl), entonces la funcion
> > siempre accede a la misma variable que tiene 3.
>
> Entonces, ¿la definición la función anónima lambda no se hace al
> momento de ejecutar el .append()? Eso es lo que no me cierra.
>
> Entiendo que "i" al salir del for sea 3, pero si la función anónima se
> definiría dentro del for, para mí debería funcionar como yo espero.
> Ahora bien, si me dicen que la función se define al momento de hacer
> functions[0](55) es otro cantar.
>
> Pero, haciendo unas pruebas veo que "se define al momento de ser llamada"
>
> >>> functions = []
> >>> for i in (1,2,3):
> ...   functions.append(lambda d: mifunc(i, d))
> ...
> >>> functions[0](55)
> 3 55
> >>> i = 44
> >>> functions[0](55)
> 44 55
> >>>
>
> ¡Ahí está el pelo del huevo!
>
> > Una forma de lograr lo que queres es capturar la variable i en una
> variable
> > local del lambda:
>
> > In [7]: for i in (1,2,3):
> >    ...:     functions.append(lambda d, i=i: mifunc(i, d))
>
> Che, gracias. Esto funciona de lujo. Sin embargo, no estoy pudiendo
> entender el porqué.
>
>
> --
> Kaufmann Manuel
> -- http://elblogdehumitos.com.ar
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140924/8a18e26e/attachment.html>


More information about the pyar mailing list