2010-07-15 16 views
5

Ich möchte eine Python-Funktion an eine andere Funktion übergeben mit einigen seiner Parameter "ausgefüllt" vor der Zeit.Erstellen Python-Funktion mit partiellen Parametern

Dies ist eine Vereinfachung, was ich tue:

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 

Ich will nicht irgendeine Art von Vergehen der args und es später verwenden, um mit *args explodiert, weil die Funktion ich inc2 in bin vorbei weiß nicht, args zu ihm zu übergeben.

Das fühlt sich ein wenig zu schlau für ein Gruppenprojekt an ... gibt es einen einfacheren oder pythonischen Weg, dies zu tun?

Danke!

Antwort

18

Dies wird Currying oder teilweise Anwendung genannt. Sie können das eingebaute functools.partial() verwenden. Etwas wie das Folgende würde tun, was Sie wollen.

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

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

Danke! Eine meiner Lieblingsfunktionen von Haskell ist das eingebaute Curry. Ich hätte nur den Begriff :) verwenden sollen. –

Verwandte Themen