[pyar] Funciones lambdas dentro de for

fisa fisadev en gmail.com
Mie Sep 24 12:47:29 ART 2014


Hablando mal y pronto, una clausura es "contexto" que la función
necesita para poder ejecutarse. Por ejemplo, vos estás definiendo una
función que para poder ejecutarse necesita una variable "i", que no es
algo que reciba como parámetro ni que se defina dentro de la función,
así que lo va a sacar de ese contexto.

La clausura en este caso y como python las implementa, apunta a la
**variable**, y no al objeto al que esa variable hace referencia.

Y como el for define una única variable "i" que es reutilizada para
todos los ciclos, todas tus lambdas en sus contextos apuntan a esa
misma variable "i".
Cuando ejecutes cada lambda, todas van a hacer algo más o menos así:
"huy, necesito evaluar "i", de dónde sale? De mi contexto, que dice
que es aquella variable, la del for"
Así que todas terminan consultando a "i" por su valor al momento de
ejecutar la lambda. "i" terminó con un 3, así que en ese momento,
devuelve 3.


El día 24 de septiembre de 2014, 12:40, Manuel Kaufmann
<humitos en gmail.com> escribió:
> 2014-09-24 12:37 GMT-03:00 fisa <fisadev en gmail.com>:
>> Porque cada lambda está teniendo una clausura a la variable "i", que
>> se crea para el for, pero es la misma variable que se usa a lo largo
>> de todos los ciclos.
>
> No sé que es una "clausura" :(
>
> Pero, ¿ese lambda no se ejecuta en el momento en el que se agrega a la
> lista cuando "i" vale 1, 2 o 3?
>
>> Todas tus funciones tienen clausuras a esa misma
>> variable, que al final termina teniendo el 3.
>
> ¿Cómo puedo resolver esta situación? ¿Haciendo un copy.copy de "i"?
>
>
> --
> 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



-- 
fisa  -  Juan Pedro Fisanotti


More information about the pyar mailing list