为了账号安全,请及时绑定邮箱和手机立即绑定

很多同学都有疑问,我用了半天时间才稍微理解本节,用的实际验证,欢迎指正

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)


我个人理解,欢迎讨论

正在回答

1 回答

为什么打印出来的i全是3啊 还是不能理解

0 回复 有任何疑惑可以回复我~
#1

猿子 提问者

执行f1()的时候,实际仅运行了函数 g(),外围的for早已经执行完毕,所以,此时此刻 i早已经变成了3
2017-08-24 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255532    人
  • 解答问题       3038    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

很多同学都有疑问,我用了半天时间才稍微理解本节,用的实际验证,欢迎指正

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号