[Python-es] Duda con los parametros de funciones lambda.

Pepe Aracil pepe en diselpro.com
Vie Ago 27 00:13:00 CEST 2010


Hola.

De momento solo se me ocurre convertir en un literal la variable que
contiene el multiplo fijo con la funcion eval:

a=1
funciones.append(eval("lambda x: multiplica(%s ,x)" % a))
a=2
funciones.append(eval("lambda x: multiplica(%s ,x)" % a))
...

Saludos.



El 26 de agosto de 2010 23:42, Txema Vicente <txema en nabla.net> escribió:

>  Buenas.
>
> Tengo un problemilla con las funciones lambda, quiero generar un monton de
> ellas desde un bucle, pero me he topado con que si hago esto:
>
> def multiplica(n,m): return n*m
>
> funciones=[]
>
> # Primera forma
> funciones.append(lambda x: multiplica(1 ,x))
> funciones.append(lambda x: multiplica(2 ,x))
> funciones.append(lambda x: multiplica(3 ,x))
>
> # Segunda forma
> a=4
> funciones.append(lambda x: multiplica(a ,x))
> a=5
> funciones.append(lambda x: multiplica(a ,x))
> a=6
> funciones.append(lambda x: multiplica(a ,x))
>
> # Tercera forma
> for b in (7,8,9): funciones.append(lambda x: multiplica(b ,x))
>
> # Resultado
> for funcion in funciones: print str(funcion(10))
>
> La salida que esperaba era :
> 10, 20, 30, 40, 50, 60, 70, 80, 90
>
> Pero salida es:
> 10, 20, 30, 60, 60, 60, 90, 90, 90
>
> Por lo visto se queda con el ultimo valor que tiene "a" o "b".
> Vale: se pasan por referencia, pero yo quiero el valor.
>
> Como se puede sacar el valor para hacer que la tercera forma funcione?
>
> Saludos
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100827/56ea95af/attachment.html>


Más información sobre la lista de distribución Python-es