Python Lambda函数转换
我一直在为一段我无法理解的python代码而挣扎。 这是一个嵌套的lambda函数,如下所示:Python Lambda函数转换,python,lambda,Python,Lambda,我一直在为一段我无法理解的python代码而挣扎。 这是一个嵌套的lambda函数,如下所示: lambda l: lambda x: x[0] in [None if not i.object else i.object.key for i in l] 我试着翻译它,我想出了这个,但我不认为这是正确的 def f1(l): def f2(x): for i in l: if not i.object:
lambda l: lambda x: x[0] in [None if not i.object else i.object.key for i in l]
我试着翻译它,我想出了这个,但我不认为这是正确的
def f1(l):
def f2(x):
for i in l:
if not i.object:
return None
else
return x[0]
第1步:
def f1(l):
def f2(x):
xs = [None if not i.object else i.object.key for i in l]
return x[0] in xs
return f2
def f1(l):
def f2(x):
xs = []
for i in l:
if not i.object:
xs.append(None)
else:
xs.append(i.object.key)
return x[0] in xs
return f2
第二步:
def f1(l):
def f2(x):
xs = [None if not i.object else i.object.key for i in l]
return x[0] in xs
return f2
def f1(l):
def f2(x):
xs = []
for i in l:
if not i.object:
xs.append(None)
else:
xs.append(i.object.key)
return x[0] in xs
return f2
@citaret给出的公认答案很好,但其中一个方面到目前为止还没有弄清楚,那就是-为什么我们在函数中有一个函数,为什么不只是有
f1(l,x)
答案是,该函数可能被用作另一个函数的输入,该函数正好有一个参数,因此我们希望在函数中“捕获”列表l
,因此我们在调用函数时只需要提供x
(这称为“闭包”)
例如,我们可以创建一个函数f
,它以列表l
作为输入,并在l
上返回一个新函数(闭包),该函数接受x
,如果x
在l
中,则返回True:
f = lambda l: lambda x: x in l
然后我们可以创建一个函数f2
,它是一个列表的闭包:
f2 = f([1, 2, 3])
现在我们可以将f2
映射到另一个列表:
print map(f2, [2, 3, 4])
产生:
[True, True, False]
Python的functools
模块提供了一个函数来帮助实现这一点,并可能使内部lambda的意图更加清晰,即我们可以将f3
定义为:
f3 = functools.partial(lambda l, x: x in l, [1, 2, 3])
print map(f3, [2, 3, 4])
有关闭包的更全面描述,请参见答案。这是错误的
lambda
s返回其主体的值。在这种情况下,外部lambda返回内部lambda,但这些函数不返回任何函数。。。您应该在f1
定义的末尾返回f2。翻译非常简单。如果您有lambda:
则必须将其替换为def name(