Muy aclaratorias las respuestas, muchas gracias.
Y menudo juguete functools, no sabía que existía, que bien me lo voy a
pasar.
Suerte.
Una solución pasa por usar otra lambda auxiliar:
for b in (7,8,9):
funciones.append((lambda b: lambda x: multiplica(b, x))(b))
Pero como esto es feo,
2010/8/26 Txema Vicente :
> 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))
On Thu, 26 Aug 2010 23:42:58 +0200 Txema Vicente wrote:
> # 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:
El día 26 de agosto de 2010 23:42, Txema Vicente 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.a
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, Txe
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 ,