将参数添加到python回调

时间:2016-12-10 17:15:24

标签: python lambda parameters callback

我是Python的初学者,除了self和事件之外,我想在回调中添加一个参数。 我尝试过lambda,但没有成功。
我的代码目前看起来像这样:

control = monitor(block, callback=self.model)  

我的模特是:

def model(self, transaction)

我想:

def model(self, file, transaction)   

file is a string parameter我想传递给我的" model" 我尝试通过更改控制线:

control = monitor(block, lambda transaction, args=args:    callback=self.model(transaction, args)  

但是这不起作用,它变得过于先进但我的python知识 我得到以下错误:"语法错误:lambda不能包含赋值",我猜是因为=符号。

你能帮我解释一下我应该如何处理/我做错了什么?

1 个答案:

答案 0 :(得分:4)

很多时候,当你考虑使用lambda时,最好使用执行currying(或curryfication)的functools.partial()。你可以使用

from functools import partial

def model(self, transaction, file=None):
    ...

control = monitor(block, callback=partial(self.model, file='foobar'))

要回答下面的评论,如果你真的需要一个真正的功能,那么你 可以设计你自己:

def callback(func, **kwargs):
    @functools.wraps(func)
    def wrapper(*a, **k):
        return functools.partial(func, **kwargs)(*a, **k)
    return wrapper

control = monitor(block, callback=callback(self.model, file='foobar'))