有些场景中,我们需要创建一系列的多个lambda函数,我们想当然的会用如下的代码:
a = []
for i in range(5):
a.append(lambda x: x+i)
print(a[0](0))
print(a[1](0))
print(a[2](0))
print(a[3](0))
print(a[4](0))
输出:
4
4
4
4
4
意外地发现,输出都一样。分析一下发现,这些输出都是i=4 (也就是 i 的最后取值) 时创建的lambda函数的输出。
多次实验可发现,lambda中的 i 总等于调用 lambda 时 i 的值,而非创建 lambda 时 i 的值。
为了使创建的 lambda 函数中 i 参数保持固定,不再随 i 变量的变化而变化,从而创建一系列的不同的 lambda 函数,采用如下代码:
a = []
for i in range(5):
a.append(lambda x,i=i: x+i) # i=i, 前一个i表示i是lambda函数的一个参数,后一个i向i参数传入默认值
print(a[0](0))
print(a[1](0))
print(a[2](0))
print(a[3](0))
print(a[4](0))
输出:
0
1
2
3
4
这样多增加一个默认参数,用for循环来改变默认参数的值,就达到了我们想要的效果。