[pyar] Funciones lambdas dentro de for

Manuel Kaufmann humitos en gmail.com
Mie Sep 24 12:49:46 ART 2014


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


More information about the pyar mailing list