2010-07-15 52 views
5

我想將Python函數提前傳遞給另一個函數,其中一些參數「提前填寫」。使用部分參數創建Python函數

這是簡化的我在做什麼:

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 

我不希望使用某種args傳球,後來它爆炸與*args因爲我傳遞inc2到函數不知道通過args到它。

這對於一個團隊項目來說有點太聰明瞭......有沒有更直接的或pythonic的方式來做到這一點?

謝謝!

回答

18

這被稱爲咖喱或部分應用。您可以使用內置的functools.partial()。像下面這樣的東西會做你想做的。

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

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

謝謝! Haskell最喜歡的功能之一是內置的咖喱。我應該只使用術語:)。 – 2010-07-15 18:45:14