求大神解答
def count(): fs = [] for i in range(1, 4): def f(): return i*i fs.append(f) return fs f1, f2, f3 = count() 可以帮我解释下吗?fs.append(f) 没看懂什么意思
def count(): fs = [] for i in range(1, 4): def f(): return i*i fs.append(f) return fs f1, f2, f3 = count() 可以帮我解释下吗?fs.append(f) 没看懂什么意思
2015-10-16
这个是讲的python的闭包吧。是这个意思,这里本来想返回 1*1,2*2,3*3,然后 fs.append(f),首先说 append,是将f的引用添加到数组fs中,这个时候,只是添加的f的引用,没有保留i的值,然后在 count执行到f()方法时,因为i的值没有保留下来,所以,当循环结束,i的值为3,也就是说,fs在执行阶段,取出的f(3)的结果,就是9了,所以 f1,f2,f3都为9了,如果想实现f1=1,f2=4,f3=9,那么,需要的是,不仅要保留住f的引用,还需要保留住i的值,所以,代码如下:
def count(): fs = [] for i in range(1, 4): def f(j): def g(): return j*j; return g; fs.append(f(i)) return fs f1, f2, f3 = count()
这样,就保留住了i的值,即,fs中保留的是 [f(1),f(2),f(3)],再计算f函数的结果,即fs=[1,4,9]
举报