问题
I am a beginner in Python, and I would like to add a parameter to a callback, in addition to the self and the event.
I have tried with lambda, but without success.
My code at the moment looks like this :
control = monitor(block, callback=self.model)
And my model is :
def model(self, transaction)
I would like to have :
def model(self, file, transaction)
file being a string parameter I would like to pass to my "model" I tried by changing the control line in :
control = monitor(block, lambda transaction, args=args: callback=self.model(transaction, args)
but this does not work, and it is getting too advanced but my python knowledge.
I get the following Error : "SyntaxError: lambda cannot contain assignment", I guess because of the = symbol.
Could you help me by explaining how I should proceed/what I am doing wrong ?
回答1:
Many times, when you think about using lambda, it is best to use functools.partial() which performs currying (or curryfication). You can use
from functools import partial
def model(self, transaction, file=None):
...
control = monitor(block, callback=partial(self.model, file='foobar'))
To answer your comment below, if you really need a true function, you can design you own:
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'))
来源:https://stackoverflow.com/questions/41078154/adding-parameter-to-python-callback