[pyar] Funciones lambdas dentro de for

Angel Java Lopez ajlopez2000 en gmail.com
Mie Sep 24 12:41:39 ART 2014


Si, es lo que pasa en otros lenguajes con closure de ese tipo, como
JavaScript.

Lo que hago (disculpen, ni idea de Python) es, en JavaScript, el viejo
truco del makefn:

function mifunc(static, dynamic) {
  console.log(static, dynamic);
}

function makefn(static) {
    return function (dynamic) {
        return mifunc(static, dynamic);
    }
}

var functions = [];

for (var k = 1; k <= 3; k++)
    functions.push(makefn(k));


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. Todas tus funciones tienen clausuras a esa misma
> variable, que al final termina teniendo el 3.
>
> El día 24 de septiembre de 2014, 12:34, Manuel Kaufmann
> <humitos en gmail.com> escribió:
> > Hola lista!
> >
> > Ahora sí que estoy descolocado. Esperaba un resultado diferente a esto
> > y aún no entiendo su porqué.
> >
> >>>> def mifunc(static, dynamic):
> > ...   print static, dynamic
> > ...
> >>>> functions = []
> >>>> for i in (1,2,3):
> > ...   functions.append(lambda d: mifunc(i, d))
> > ...
> >>>> functions[0](55)
> > 3 55
> >>>> functions[1](55)
> > 3 55
> >>>> functions[2](55)
> > 3 55
> >>>>
> >
> > Yo esperaba los resultados:
> > 1 55
> > 2 55
> > 3 55
> >
> > ¿Porqué esto no es así?
> >
> > --
> > 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
> _______________________________________________
> 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/2f748274/attachment.html>


More information about the pyar mailing list