我是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不能包含赋值",我猜是因为=符号。
你能帮我解释一下我应该如何处理/我做错了什么?
答案 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'))