2011-11-08 14 views
6

Esta función f acepta una lista de argumentos y devuelve otra que se puede llamar con la misma lista de argumentos, para que se le puedan aplicar otras funciones.¿Este combinador tiene un nombre?

from operator import add, mul 

def f(*a, **kw): 
    return lambda g: g(*a, **kw) 

map(f(3, 10), (add, mul)) # -> [13, 30] 

¿Cómo se llama f? ¿Es esto un combinador de algún tipo?

Respuesta

4

El combinador es una forma curried de apply. En comparación con la función incorporada (en desuso) apply, f invierte el orden de los argumentos para que sea más útil, proporcionando lo que parece una función dual a functools.partial.

+0

Con la diferencia (probablemente insignificante) que un 'partial' se puede llamar con más argumentos que se pasan de forma adicional. – glglgl

+0

no, basta ... no es lo mismo, creo ... – glglgl

+0

He reescrito esto significativamente, para corregir por haber malinterpretado originalmente la pregunta. –

0

Está muy relacionado con partial, pero no es lo mismo.

partial toma una función y algunos argumentos, y devuelve un invocable que invoca al dado invocable con los parámetros combinados.

def pr(x): print (x) # making it fit for 2.x and 3.x 

p = functools.partial(pr, 1, 2, 3) 
p() # prints 1, 2, 3 

q = f(1, 2, 3) 
p(pr) # prints 1, 2, 3 
Cuestiones relacionadas