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