【发布时间】:2016-04-16 06:22:08
【问题描述】:
请考虑下面的代码。
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。
你能解释一下我在这里做错了什么吗?谢谢
【问题讨论】:
标签: python function parameters arguments alias