<分区>
请考虑下面的代码。
a = []
def func1(x):
return x
for i in range(3):
def func2():
return func1(i)
a.append(func2)
for k in range(3):
print(a[k]())
打印出来
2
2
2
来自 http://gestaltrevision.be/wiki/python/aliases 中的“别名的使用” (最后一节)和 http://gestaltrevision.be/wiki/python/functions_basics 中的“范围”部分,我了解到函数参数实际上是传递的参数的别名。
所以根据那个,在
def func1(x): return x
for i in range(3):
def func2(): return func1(i)
我的推理是因为 x 将作为 i 的别名存储,即使每次执行循环时 i 都被重新分配,它的别名 x 也无关紧要。
所以我希望前三行输出 0、1、2 而不是 2、2、2。
你能解释一下我做错了什么吗?谢谢