2010-07-15 19 views
5

Quiero pasar una función de Python a otra función con algunos de sus parámetros "completados" antes de tiempo.Creación de la función de Python con parámetros parciales

Esta es la simplificación lo que estoy haciendo:

def add(x, y): 
    return x + y 

def increment_factory(i): # create a function that increments by i 
    return (lambda y: add(i, y)) 

inc2 = increment_factory(2) 

print inc2(3) # prints 5 

no quiero utilizar algún tipo de paso de args y más tarde con la explosión de *args porque la función que estoy pasando en inc2 no sabe pasar args a él.

Esto se siente demasiado inteligente para un proyecto de grupo ... ¿hay una manera más directa o pionera de hacer esto?

Gracias!

Respuesta

18

Esto se denomina currying, o aplicación parcial. Puede usar el built-in functools.partial(). Algo como lo siguiente haría lo que quieras.

import functools 
def add(x,y): 
    return x + y 

inc2 = functools.partial(add, 2) 
print inc2(3) 
+0

Gracias! Una de mis características favoritas de Haskell es el currying incorporado. Debería haber usado el término :). –

Cuestiones relacionadas