2

是什么any = lambda v: v意思?似乎v只有v它自己。

class Object(object):                   
    """Common base class supporting automatic kwargs->attributes handling,
    and cloning."""
    attrs = ()

    def __init__(self, *args, **kwargs):
        any = lambda v: v
        for name, type_ in self.attrs:  
            value = kwargs.get(name)    
            if value is not None:       
                setattr(self, name, (type_ or any)(value))
            else:                       
                try:                    
                    getattr(self, name) 
                except AttributeError:  
                    setattr(self, name, None)
4

2 回答 2

9

lambda v: v创建一个恒等函数,它只返回其参数不变。将其分配给局部变量相当于定义一个局部函数,如下所示:

def any(v):
    return v

对于想要调用函数以对参数进行一些处理的代码,对于实际函数不可用或不希望进行处理的情况,它可以用作后备代码。

在您发布的代码中,type_逻辑上可能为假(最有可能None),这意味着它不会被调用,因此它被替换为标识函数。在这种情况下,作者也可以使用更明确if的方法来跳过函数调用,但代价是循环中的额外混乱。

BTWany对局部变量来说是一个坏名字,因为它掩盖了具有相同名称和完全不同含义的内置函数。

于 2012-11-01T08:19:16.743 回答
0

lambda意思是“动态地创建一个函数”。它是 lambda 演算的一部分(Alonzo Church 的论文)和函数式编程的基础。

该表达式lambda v: v创建一个接受参数(v在这种情况下)并返回参数的函数

于 2012-11-01T08:19:21.103 回答