簡體   English   中英

列表理解錯誤中的lambda

[英]lambda in list comprehension error

我正在執行以下操作:

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]

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]

您忘記了調用lambda 這是一種符合要求的方法:

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

為了獲得列表中數字的平方,您不需要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]
f = lambda x: x**2
print([f(x) for x in ll])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM