.>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改前:
返回x的乘法函数,是函数,调用才执行
def make():
return [lambda x:i*x for i in range(3)]
for r in make():
print(r(4))
期望输出:
0
4
8
实际输出:
8
8
8
原因:
i因为闭包延迟绑定,到执行的时候已经为2,所以参数4一直只和最终的2相乘
.>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改后:
def make():
解决的办法就是给它立刻绑定
return [lambda x:i*x for i in range(3)]
或
def make():
res=[]
for i in range(4):
立即绑定
def code(x,i=i):
return x**i;
res+=[code]
return res;