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)
答案 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
)并返回参数