use*_*361 4 python parameters lambda callback
我是Python的初学者,除了self和event外,我想向回调添加参数。我尝试了lambda,但没有成功。
目前,我的代码如下所示:
control = monitor(block, callback=self.model)
Run Code Online (Sandbox Code Playgroud)
我的模型是:
def model(self, transaction)
Run Code Online (Sandbox Code Playgroud)
我想拥有 :
def model(self, file, transaction)
Run Code Online (Sandbox Code Playgroud)
文件是一个字符串参数,我想通过更改以下内容的控制行传递给我的“模型”:
control = monitor(block, lambda transaction, args=args: callback=self.model(transaction, args)
Run Code Online (Sandbox Code Playgroud)
但这不起作用,并且它变得太高级了,但是我的python知识。
我收到以下错误:“ SyntaxError:lambda无法包含赋值”,我猜是因为=符号。
您能通过解释我应该如何进行/做错了什么来帮助我?
很多时候,当您考虑使用lambda时,最好使用functools.partial()执行currying(或curryfication)的方法。您可以使用
from functools import partial
def model(self, transaction, file=None):
...
control = monitor(block, callback=partial(self.model, file='foobar'))
Run Code Online (Sandbox Code Playgroud)
要在下面回答您的评论,如果您确实需要一个真正的功能,则可以设计自己的产品:
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'))
Run Code Online (Sandbox Code Playgroud)