functools.partial和类似的lambda之间的区别?
在Python中,假设我有一个函数f
,我想用一些辅助参数传递(为简单起见,假设它只是第一个参数保持可变)。
做这两种方式(如果有的话)有什么区别?
# Assume secondary_args and secondary_kwargs have been defined
import functools
g1 = functools.partial(f, *secondary_args, **secondary_kwargs)
g2 = lambda x: f(x, *secondary_args, **secondary_kwargs)
在partial
文档页面中,例如,有这样的引用:
类中定义的partial
对象的行为与静态方法类似,不会在实例属性查找期间转换为绑定方法。
如果用lambda方法从提供给类的参数(在构造函数中或稍后通过函数)中创建类方法,是否会受到此方法的影响?
lambda函数与标准函数具有相同的类型,因此它的行为将类似于实例方法。
你的例子中的partial
对象可以这样调用:
g1(x, y, z)
导致这个调用(不是有效的Python语法,但你明白了):
f(*secondary_args, x, y, z, **secondary_kwargs)
lambda只接受一个参数并使用不同的参数顺序。 (当然,这些差异都可以克服 - 我只是回答你给出的两个版本之间的差异。)
partial
对象的执行比执行等价的lambda
稍快。
我相信类方法只适用于在类定义期间分配的函数。 以后分配的功能没有专门处理。
除此之外,我个人更喜欢lambdas,因为它们更常见,因此使代码更易于理解。
class Foo(object):
def __init__(self, base):
self.int = lambda x:int(x, base)
print Foo(4).int('11')
是的, lambda
会因此而“受苦”。 partial
不存在这个问题,因为它是调用操作符重载的对象,而不是真正的函数。
但是在类定义中使用这样的lambda只是误用。
链接地址: http://www.djcxy.com/p/51287.html上一篇: Differences between functools.partial and a similar lambda?