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

闭包实例为什么说结果全部是9啊?

def count():
    fs = []
    for i in range(1, 4):
        def f():
             return i*i
        fs.append(f)
    return fs

f1, f2, f3 = count()

章节中的实例,但是怎么也想不明白为什么说全部是9,不是有for循环吗?那循环出来的1,2,去哪了?有谁能给通俗的讲一下呀 ?

正在回答

3 回答

就好比我在1点的时候告诉你,你的学号取决于时钟上显示的时间的平方。然而你是在三点的时候才去确认自己的学号,那个时候你的学号就是9了。这个for循环只是让count函数返回一个拥有三个f()函数的列表,其中f()的功能是返回i*i的值。只有当i=3的时候,列表才生成完毕。列表生成之后,再去调用列表里的f()函数,由于f()返回的值是取决于当前i的值,当前的i为3,所以三个f()函数返回的都是9。

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

慕仙6914778 提问者

讲解的很棒,谢谢你
2018-08-20 回复 有任何疑惑可以回复我~
#2

扶摇三问

谢谢讲解,我现在也懂了
2018-08-27 回复 有任何疑惑可以回复我~
#3

鹰与玫瑰

谢谢你
2018-09-02 回复 有任何疑惑可以回复我~
#4

窗子外的数学卷子

谢谢呀
2018-11-02 回复 有任何疑惑可以回复我~
#5

weixin_慕仙9003424

哇 好棒 我也懂了
2019-05-05 回复 有任何疑惑可以回复我~
查看2条回复

那么:

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()

print f1(), f2(), f3()

不也是列表生成之后,再去调用列表里的f()函数吗?为什么结果就是1,4,9了呢

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

奔跑的公牛

fs.append(f(i)) 注意这行代码 其中这行代码 是把f()对应的参数也连带着给加到fs这个列表里面去了
2018-10-12 回复 有任何疑惑可以回复我~

棒棒的 我也懂了  所以说里面不能有循环或者变化的东西

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

举报

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

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

进入课程

闭包实例为什么说结果全部是9啊?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信