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?

    下一篇: Java Lambdas and Closures