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@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a