lif*_* pi 2 python lambda closures partial functools
在python中,我想将对象方法导出为普通函数.该对象将被关闭.如下所示:
from functools import partial
class A(object):
def __init__(self,a):
self.a = a
def m(self,b):
return self.a+b
def exportm(self):
return lambda b,self=self: self.m(b)
#return partial(self.m,self=self)
f = A(10).exportm()
print f(5)
Run Code Online (Sandbox Code Playgroud)
这很好用并按预期打印15.但是如果我用注释行替换return-lambda-line,它将失败,从而产生以下错误:
TypeError: m() got multiple values for keyword argument 'self'
Run Code Online (Sandbox Code Playgroud)
我知道使用functools比使用lambda表达式更干净.所以我想知道如何使用functools中的部分或其他工具来完成此操作.
self.m已经绑定了,所以没有必要传递self=self给它.简单地回来self.m.有关更多参数,请使用partial(self.m, ...):
class A(object):
def __init__(self, a):
self.a = a
def m(self, b, c):
return self.a + b + c
def exportm(self):
return partial(self.m, 300)
f = A(10).exportm()
print f(5)
Run Code Online (Sandbox Code Playgroud)