【转】weixin_慕仔4492420
def count():#定义一个计算函数
fs = []#创建一个空的列表
for i in range(1, 4):#循环条件i从1到3
def f():#本来想创建一个闭包的错误函数
return i*i#返回值是i的平方
fs.append(f)#往空列表依次增加刚刚定义的函数
return fs#返回空的列表
f1, f2, f3 = count()#依次把count里面的三个函数赋给f1, f2, f3
print f1(),f2(),f3()#之所以三个函数的返回值均为9,是因为f1()的调用时基于i等于3,故产生了错误的值。
def count():
fs = []
for i in range(1, 4):#以下是正确的闭包
def f(j):#定义函数f(j) j为形参
def g():#定义函数g
return j*j#返回值为j的平方
return g #返回值为函数g
fs.append(f(i))#i每变化一次都往list里面放入一个函数g,且里面的形参至关重要为外函数的i,故每次调用f1()不会因为i已经变为3而出错
return fs
f1, f2, f3 = count()
print f1(),f2(), f3()
另外应该需要注意fs.append(f())与fs.append(f)的区别