1 回答

TA贡献1799条经验 获得超6个赞
实际发生的事情是这样的:
lambdas 是使用idx in range(5). 当一个 lambda 被调用时,无论调用者的 idx 参数是什么idxfuncs[idx]()(即里面是什么都无关紧要),lambda 使用的是idxfrom range(5)。由于range(5)now(在末尾)指向4,即idx每个lambda所使用的值,因此所有这些lambda都打印4。
Lambda是不同的对象,但是它们仍然都使用当前的inner idx。
这是一个对我有帮助的例子:
ls=[]
for i in range(2):
ls.append(lambda : print(i))
for f in ls:
print(id(f), end=' ')
f()
for i in range(3,5):
ls.append(lambda : print(i))
for f in ls:
print(id(f), end=' ')
f()
44467888608 1 # 1st lambda - uses the last idx (for range was 2)
44467888336 1 # 2nd lambda - uses the last idx (for range was 2)
44467888608 4 # 1st lambda - uses the current last idx (2nd for range was 5)
44467888336 4 # 2nd lambda - uses the current last idx (2nd for range was 5)
44467921240 4 # 3rd + 4th lambdas
44467921512 4
添加回答
举报