adding parameter to python callback

我们两清 提交于 2019-12-10 17:08:03

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!