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