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

求大神看看这个部分是思路总结有木有问题!!!

(错误代码)

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

f1, f2, f3 = count()

其主要的错误原因是由于 fs.append(f)其 append进去的是一个函数,而不是一个函数值,其会首先call f函数,得到return的数值为 i*i,问题在于这个时候的i * i 中的i 是可以随着变化的,最终变化成为了3,导致前面append进去的数值都变成了9。



(正确代码)

def count():

   fs = []

   for i in range(1, 4):

       def f():

           return i*i

       fs.append(f())

   return fs


f1, f2, f3 = count()

print f1, f2, f3


这个知识点最为关键的地方是对于函数和函数值的理解,f 是函数(如果写return f ,这个时候会返回一个函数的地址),但是 f()是函数值是(如果这个时候写 return f(),这个时候会返回一个函数值))


对于上面代码的解决方法在于可以对 fs .append(f)进行更改为  fs.append(f()),即每次添加入list的是一个函数的数值,而函数的数值是不会变化的。最后部分的 print f1(), f2(), f3() 改为print f1, f2, f3,原因是因为当前没有函数,只是函数值。



正在回答

3 回答

虽然答案正确,但是题目要的是得到能计算1x1、2x2、3x3的函数,需要的是使参数i不被改变。

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

点醒了我!谢谢!

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

我个人认为,您结果虽然正确,但是你的正确代码与本节的主题不符,你定义的函数没有启到延长调用的目的

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

举报

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

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

进入课程

求大神看看这个部分是思路总结有木有问题!!!

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