拉姆达在列表理解错误

问题描述:

我做了以下内容:拉姆达在列表理解错误

ll = [-8, -4, 0, 4, 8] 
[lambda x: x**2 for x in ll] 

并获得以下错误:

[<function __main__.<listcomp>.<lambda>>, 
<function __main__.<listcomp>.<lambda>>, 
<function __main__.<listcomp>.<lambda>>, 
<function __main__.<listcomp>.<lambda>>, 
<function __main__.<listcomp>.<lambda>>] 

可能是什么问题呢?我知道所需的结果可以通过下面的代码来实现,但我想了解为什么lambda不能在列表理解中工作?

[x**2 for x in ll] 
+2

这不是一个错误。你在列表中获得5个lambda表达式。你期望什么? –

为了得到数字的平方在列表中,您不需要lambda表达式。您应该这样做:

>>> [x**2 for x in ll] 
[64, 16, 0, 16, 64] 

在您的使用中,这不是错误。您在列表中看到对lambda函数的引用(因为您没有调用该函数)。为了使其工作,你可以这样做:

>>> ll = [-8, -4, 0, 4, 8] 
>>> f = lambda x: x**2 
>>> [f(x) for x in ll] 
[64, 16, 0, 16, 64] 

这相当于:

>>> [(lambda x: x**2)(x) for x in ll] 
[64, 16, 0, 16, 64] 

注: LAMBDA是不是在这里所有需要

拉姆达返回一个函数,它不评估的功能,你可能想:

ll = [-8, -4, 0, 4, 8] 
[x**2 for x in ll] 

ll = [-8, -4, 0, 4, 8] 
f = lambda x: x**2 
[f(x) for x in ll] 

,它等于:

ll = [-8, -4, 0, 4, 8] 
def f(x): 
    return x**2 
[f(x) for x in ll] 
+0

感谢Pawel和@Moinuddin的回复。所以我现在理解的是,[x中的lambda x:x ** 2]将返回一个包含5个函数引用的列表。 我期待它会返回一个函数对象,该函数将应用于列表“ll”的元素。 –

你没有说清楚你期望的内容广告,但是我建议这样的:

ll = [-8, -4, 0, 4, 8] 
f = lambda x: x**2 
print([f(x) for x in ll]) 

你忘了调用lambda。这里有一种方法可以做到这一点:

ll = [-8, -4, 0, 4, 8] 
print([(lambda x: x**2)(x) for x in ll])