Lista de funciones, algún modo sin eval ni lambda?
Tny
a.porrua en gmail.com
Lun Sep 18 19:41:41 CEST 2006
Hola.
Tengo un script que aplica a una serie de archivos una lista de
funciones, para identificar CRCs, funcionando sin problemas...
Pero ahora tenía que probar unas cuantas funciones más y me resultaba
más cómodo definirlas en tiempo de ejecución pues sólo se diferenciaban
en un parámetro, y tenía la lista de parámetros.
Después de darle muchas vueltas di con una solución y quisiera saber si
a alguién se le ocurría alguna otra.
El objetivo es hacer una lista de funciones a partir de una función que
tome dos parametros y una lista con los valores que tomará uno de ellos,
cambiar el otro script no se considera, porque emplear listas de
funciones permite más versatilidad.
Ejemplos chorras...
El modo numero 1. No funciona y no sé porque
>>> def sumar(a,b):
return a+b
>>> sumas=[lambda a:sumar(a,b) for b in xrange(10)]
>>> sumas[0](5)
14
>>> sumas[6](3)
12
Siempre hace sumar(a+9) ????
Misterios insondables :)
El modo que funciona:
>>> sumas=[eval("lambda a:sumar(a,"+str(b)+")") for b in xrange(10)]
>>> sumas[0](5)
5
>>> sumas[6](3)
9
¿A alguien se le ocurre alguna manera mejor que emplear un eval para
crear un lambda que llame a la función original?
¿Se puede prescindir de lambda o de eval?
¿Cómo se haría lo mismo con un iterador?
Saludos y Gracias.
Más información sobre la lista de distribución Python-es