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

求解答for循环在其中的作用

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

f1, f2, f3 = count()

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

f1=count()运行后输出的为什么不是1,4,9?不是有for循环在那吗?不是for循环结束后才继续执行count( )函数剩余的部分吗?不能理解

正在回答

4 回答

画内存图。。。和第一个对比。。。


第一个,count函数执行,创建一片内存区域,在这内存区域里面开辟一个小内存空间,命名为i,其中存储变量的值,当执行count之后,i由于循环了三次,所以其值变为了3。此后调用另外三个函数的时候,分别创建三块内存区域,执行时,他们所引用(指向)的i,都是第一块内存里面的i,所以都是用3来计算

第二个,三个函数,三个内存区域,每个区域里面有一块命名为j的内存区域,其值分别是1,2,3,分别是count函数空间中i不断循环给予的赋值,所以不同于第一次的结果


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

无赖

j=i ,那i的指向不应该也是3吗? 为什么用另外的变量改变外函数的变量有用?
2016-08-04 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//56fcecea0001dae802970249.jpg

如果你把for语句放到如上图的光标里的位置,那么你对这个for循环就比较好理解了,为了使得count()和g()形成闭包,但是g不能引用变化的迭代变量i,所以引入了另外一个函数f和变量j,for循环每一次迭代都调用一次f,因为f和g构成闭包的关系所以返回的是一个函数变量,最后把这个函数添加到最先定义的fs[]中,即[f(1).f(2),f(3)]。

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

f1, f2, f3 = count()    #count()返回一个包含多个函数的列表

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

的结果是1,4,9

但是f1=count(),f1是一个列表,不能直接f1()进行运算,f[0](),f[1](),f[2]()的值分别是1,4,9

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

调用count()后返回的是函数列表,即[f(1).f(2),f(3)],然后将这三个元素分别赋值给了f1,f2,f3。

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

举报

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

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

进入课程

求解答for循环在其中的作用

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