2010-07-15 14 views
5

voglio passare una funzione Python per un'altra funzione con alcuni dei suoi parametri "compilato" prima del tempo.Creazione funzione Python con i parametri parziali

Si tratta di una semplificazione quello che sto facendo:

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 

Non voglio utilizzare una sorta di passaggio di args e poi esplodere con *args perché la funzione sto passando inc2 in non sa passare args ad esso.

Questo si sente un po 'troppo intelligente per un progetto di gruppo ... c'è un modo più semplice o divinatorio per fare questo?

Grazie!

risposta

18

Questo è chiamato currying o parziale applicazione. È possibile utilizzare il built-in functools.partial(). Qualcosa come il seguente farebbe quello che vuoi.

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

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

Grazie! Una delle mie caratteristiche preferite di Haskell è il curriculum integrato. Avrei dovuto usare il termine :). –

Problemi correlati