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

Txema Vicente txema en nabla.net
Jue Ago 26 23:42:58 CEST 2010


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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100826/9e598337/attachment.html>


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