什么= lambda v:v是什么意思?

时间:2012-11-01 08:15:13

标签: python lambda

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)

2 个答案:

答案 0 :(得分:9)

lambda v: v创建一个标识函数,它只返回其参数不变。将其分配给局部变量等同于定义如下的本地函数:

def any(v):
    return v

对于想要调用函数对参数进行某些处理的代码,对于实际函数不可用或处理不受欢迎的情况,它可以作为回退。

在您发布的代码中,type_在逻辑上可能是假的(很可能是None),这意味着它不会被调用,因此它被身份函数替换。在这种情况下,作者也可以使用更明确的if来跳过函数调用,代价是循环中的其他混乱。

BTW any是局部变量的错误名称,因为它会使built-in function以相同的名称和完全不同的含义隐藏。

答案 1 :(得分:0)

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

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