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

不能理解这个循环哪里出了问题

def count():

   fs = []

   for i in range(1, 4):

       def f():

            return i*i

       fs.append(f)

   return fs

f1, f2, f3 = count()

f()在循环的时候不是依次加进了fs吗?

所以fs = [1, 4, 9]啊 跟f1还没有计算有什么关系?

正在回答

3 回答

fs.append(f)

这个f是个object,你可以打印出来看看

def f(i):

    return i*i

def count():

   fs = []

   for i in range(1, 4):

       print (f)

       print(f(i))

       fs.append(f(i))

   return fs


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

fs.append(f)是在for里面,没有处于循环外啊,for循环的代码块就2个,一个是函数f()一个是fs.append(f),for循环执行完后退出循环,接着就是执行return fs

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

Liaobaozai 提问者

那append时候应该就是依次append啊?既然是在循环里,1×1之后就会append一次,2×2以后就会append一次,最后return fs的时候为什么就不是[]1, 4, 9]呢?
2017-09-15 回复 有任何疑惑可以回复我~
#2

Jay_zhang 回复 Liaobaozai 提问者

你的误区就在于,你认为函数f()里面的代码会执行,可是没人调用怎么执行呢,append()进去的是f,又不是f()
2017-09-15 回复 有任何疑惑可以回复我~

当程序执行f1,f2,f3 = count()的时候,f1,f2,f3里面并不是[1,4,9],因为fs.append(f),加进去的是函数f(),for循环执行了3遍,也就是加进去了3个函数对象,退出循环,此时i为3,当你打印f1的时候可以看到,里面有3个函数对象,此时我们通过循环遍历f1这个list,

for x in f1:

    #调用f()函数
   print x()

这时就会看到3个9

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

Liaobaozai 提问者

fs.append(f)在for的里面,为什么处于循环外呢?
2017-09-14 回复 有任何疑惑可以回复我~
#2

精慕门2174353

说的挺好的
2017-11-20 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

不能理解这个循环哪里出了问题

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