Lista de funciones, algún modo sin eval ni lambda?

Tny a.porrua en gmail.com
Mar Sep 19 19:59:49 CEST 2006


Alexis Roda escribió:
> Prueba con algo como:
>
> def factoria(parametro) :
>     return lambda x : x + parametro
>
> sumas = [ factoria(i) for i in xrange(10) ]
>
>
>
> Saludos
>
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>
La función
def suma(a+b):
    return a+b
es una chorrada que se puede meter directamente en el lamda, pero el 
objetivo es emplear una función que ya existe, sin reescribirla en 
formato lambda ni nada por el estilo.

empleando la función quedaría

def factoria(parametro) :
    return lambda x : suma(x, parametro)

sumas = [ factoria(i) for i in xrange(10) ]

Funciona, y nos quitamos de encima el 'eval' aunque siga el 'lambda'.
Lo voy a utilizar en está ocasión en que la lista es pequeña (134 elementos)
Si por desgracia tengo que hacer la fuerza bruta un poco más bruta 
emplearé un sistema a medio camino entre las soluciones de que me habéis 
aportado

def factoria(parametro) :
    return lambda x : suma(x, parametro)

class Sum:
     def __init__( self, lista ): self.lista = lista
     def __getitem__( self, i ):
             return factoría( i )

Gracias.
Saludos.




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