a = [] for i in range(3): a.append(lambda a:i+a)
当我执行以下代码时:
for j in range(3): print(a[j](0))
2 2 2
但是当我更改变量名并执行相同的操作时:
for i in range(3): print(a[i](0))
我不能得到同样的结果:
0 1 2
您没有将变量的值保存在lambda中。您正在保存在lambda之外定义的变量。它不一定是全局变量,但在lambda的范围内,它在lambda之外声明。当迭代终止时 i 是2。这就是为什么当您使用for循环进行迭代时 j ,lambda内的值始终为 2 .
i
j
2
当您使用 一、 变量,您再次改变 在执行lambda之前。这就是为什么它会给你一个不同的结果。
一、
a = [] for i in range(3): a.append((lambda k: lambda x:(k+x))(i))
lambda k: ... 用于传递状态 一、 lambda x: (k+x) 哪里 k 是lambda范围中的私有变量。
lambda k: ...
lambda x: (k+x)
k
j ,或为其指定新值 一、 k
i = 256 k = 512 for j in range(3): print(a[j](0))