很多同学都有疑问,我用了半天时间才稍微理解本节,用的实际验证,欢迎指正
fs是个list,for的每一次,fs都会append一个函数(地址),其实要做的是存储函数的同时把参数也‘存储’,老师给的示例中fs.append(f(i)),可以看出存入方法同时还存入了当时的i,另外,f1()归根到底是调用的方法g()。
用方法去验证一下,在老师给出的参考代码第5行后插入语句 print 'j=',j 和 print 'i=',i
def count(): fs = [] for i in range(1, 4): def f(j): def g(): print 'j=',j #here print 'i=',i #here return j*j return g r = f(i) fs.append(r) return fs f1, f2, f3 = count() print f1(), f2(), f3()
结果:
j= 1 i= 3 1 j= 2 i= 3 4 j= 3 i= 3 9
我们会发现,除了打印的结果外,调用f1(),f2(),f3()时候,打印‘i’值全是3,而打印的‘j’分别是1,2,3。
所以问题就迎刃而解了。(也可以在讲课内容中的count()方法中print一下i)
我个人理解,欢迎讨论