You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于列表推导式中Lambda函数的原理与用法技术问询

列表推导式中Lambda函数的常见疑问解析

示例1

def times_two(a): return a * 2
def times_three(a): return a * 3

numbers = [1, 2, 3, 4]

both_functions = [times_two, times_three]

for number in numbers:
  print(list(map((lambda x: x(number)), both_functions)))

疑问解答

  • lambda x: x(number)的作用:这个匿名函数接收一个参数x,然后调用x(number)并返回结果。这里的x是both_functions里的函数对象(times_two或times_three),所以x(number)就是把当前循环的number作为参数传给这个函数,得到计算后的数值。
  • 第二个x的本质:x是lambda的入参,类型是函数对象——因为both_functions里存的是函数的引用,map会把列表里的每个函数依次传给这个lambda,再执行函数调用逻辑。

示例2

is_even_list = [lambda a=x: a * 10 for x in range(0, 6)]
for item in is_even_list:
    print(item())

疑问解答

  • a=x是给lambda的参数a设置默认值。如果直接写lambda a: a*10,所有lambda会共享循环变量x的最终值(也就是5),因为Python闭包是延迟绑定变量的。加上a=x后,每次循环都会把当前x的即时值绑定为a的默认值,这样每个lambda保存的都是循环时对应的x值。
  • Lambda并非只能有一个无默认值的参数,带默认值的参数是完全合法的写法,这里的a=x就是为了规避闭包延迟绑定的坑。

示例3

A = [1, 2, 3, 4]
B = [lambda: _ for _ in A]
C = [_() for _ in B]
print(A)
print(B)
print(C)

疑问解答

  • _()是调用列表B中的lambda函数。B里的每个元素都是一个无参匿名函数,它的逻辑是返回变量_的值。_()就是执行这个函数,拿到它返回的结果。
  • 注意:这里因为闭包延迟绑定,所有lambda里的_都会指向循环的最后一个值4,所以C的输出会是[4, 4, 4, 4]。

内容的提问来源于stack exchange,提问作者PersyArdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:10:39