2013-10-31 42 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