2013-10-31 75 views
3

我想添加一個回調函數來列出哪個會導致在適當的時候用一個參數調用回調函數。不過,我也希望回調傳遞給另一個變量。Python回調函數佔位符?

注意:我習慣於在C++中使用std::bindboost::bind,所以我一直在尋找類似的東西。

注意:這是Python的順便說一句。與衝突的問題

例子:

def collision_callback(hit, hitter) 
    # doing something relevant... 

object = create_object() 
collision_callbacks.append(collision_callback(_1, object)) # _1 is a placeholder from C++ lol. 
                 # as you can see here _1 is expected 
                 # to be filled in with the hit object. 

回答

3

您可以使用lambda

>>> def minus(a, b): 
...  return a - b 
... 
>>> minus1 = lambda x: minus(x, 1) 
>>> minus1(3) 
2 

另外,您還可以使用functools.partial

>>> minus1 = functools.partial(minus, b=1) 
>>> minus1(4) 
3 

但是,一些內置的功能不接受關鍵字參數。然後回落到lambda

>>> print(operator.sub.__doc__) 
sub(a, b) -- Same as a - b. 
>>> minus1 = functools.partial(operator.sub, b=1) 
>>> minus1(5) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: sub() takes no keyword arguments 

>>> minus1 = lambda x: operator.sub(x, 1) 
>>> minus1(9) 
8 

如果您預先填入領先的參數(填補第一個參數值),這並不重要:

>>> minus_from_10 = functools.partial(operator.sub, 10) 
>>> minus_from_10(7) 
3 
+0

噢,這是如此之快。謝謝。我印象深刻。我想我必須等10分鐘才能接受你的答案。順便說一句,它像魔術一樣工作。 – user2940623