temp=[lambda x: i * x for i in range(3)]
print([m(1) for m in temp])
- 首先解析这个函数:temp是个列表,内部自变量为i,由内部函数传入,外部参数为x,由外部调用输入,i in range(3)有三个元素,所以列表中有三个元素,但是i只能取值3,所以
temp=[(lambda x : i*x),(lambda x : i*x),(lambda x : i*x)]
,可以理解为先从i in range(3)
开始进行计算,最后得到i=2
,然后将i
带入temp中,得到temp=[(lambda x : 2*x),(lambda x : 2*x),(lambda x : 2*x)]
,即[2 * x,2* x,2 * x]
,m(1)表示将x=1带入列表中,代码输出:[2,2,2]。
temp=[lambda x,y=i: y * x for i in range(3)]
print([m(1) for m in temp])
- 此时解析这个函数:temp是个列表,内部自变量为i,由内部函数传入,外部参数为x,y,但是默认y值等于i值,
temp=[(lambda x,y=i: y * x),(lambda x,y=i: y * x),(lambda x,y=i: y * x)]
,可以理解为y作为变量,会随着i值变化而改变,首先计算i in range(3)
,虽然最终i=2
,但是y记录了i
值得变化,所以y
取值为0,1,2。所以列表中有三个元素,y
值可以分别取值到0,1,2,所以temp=[(lambda x,y=0: y * x),(lambda x,y=1·: y * x),(lambda x,y=2: y * x)]
,即temp=[0 * x,1* x,2 * x]
,m(1)表示将x=1带入列表中,代码输出:[0,1,2]。
def multipliers():
return [lambda x,y=i: y * x for i in range(4)]
print([m(2) for m in multipliers()])
- 此时是将推导式放进了函数中去,直接在函数外部传入变量即可输出结果[0,2,4,6]
参考:
- [1] https://blog.csdn.net/xie_0723/article/details/53925076
- [2] https://www.jianshu.com/p/bc8780cfacd8
- https://www.cnblogs.com/tkqasn/p/5977653.html
- https://www.runoob.com/note/15802