给Python回调函数添加参数

6

我是Python的初学者,想在回调函数中添加一个参数,除了self和event。我已经尝试使用lambda,但没有成功。
目前我的代码看起来像这样:

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

我的模型是:
def model(self, transaction)

I would like to have :

def model(self, file, transaction)   

我希望将一个字符串参数传递给我的“model”,该参数代表文件。 我尝试通过更改以下控制行来实现:

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

但是这并不起作用,而且它对于我在 Python 方面的知识来说已经太过高级了。
我得到以下错误:"SyntaxError: lambda cannot contain assignment",我猜是由于等号符号造成的。
你能否帮助我解释一下我应该如何继续/我做错了什么?
1个回答

10

很多时候,当你考虑使用lambda函数时,最好使用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'))

谢谢,这个可行,并且回答了问题。我只是遇到了一个小问题,因为partial没有__name__属性,而回调函数有。我会在其他一些外部代码中检查这个参数,然后相应地进行更改... - user1654361

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接