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

到底为啥都是9啊

# 希望一次返回3个函数,分别计算1x1,2x2,3x3: def count():    fs = []    for i in range(1, 4):        def f():             return i*i        fs.append(f)    return fs f1, f2, f3 = count() 你可能认为调用f1(),f2()和f3()结果应该是1,4,9,但实际结果全部都是 9(请自己动手验证)。 越往后越看不懂了。。。到底为啥都是9啊?苦恼

正在回答

3 回答

循环里面只是定义了计算平方的函数,函数的具体调用是在执行return fs语句时,而这时循环早已跑完,进函数体计算时循环变量i = 3;

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

qq_01_15 提问者

非常感谢!
2018-04-28 回复 有任何疑惑可以回复我~
#!/usr/bin/python
# -*- coding: utf-8 -*-


def count():
   fs = []
   for i in range(1, 4):
      def f():
         return i * i
      fs.append(f())  ### 此处添加返回函数f() 的结果
   return fs

f1,f2,f3 =count()

print [x for x in count()]
print f1
print f2
print f3


>>>[1, 4, 9]
>>>1
>>>4
>>>9
[Finished in 0.2s]


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

慕姐2004059

请问第10行的f 和f()区别是什么
2018-06-03 回复 有任何疑惑可以回复我~

 python中格式要求很严格,上面问题有些是格式的问题,有些是函数理解问题。另外,代码应该是越简单越好。

>>> fs = []

>>> for i in range(1,4):

def f(i):

return i*i

fs.append(f(i))

这代码的结果是序列[1,4,9],这个序列跟赋值无关,因为来源于i的赋值1,2,3。后面的count()函数,看你的代码应该就是指这个序列。所以,如果你想得出9这一个结果,那么最外面的count()函数应该进行修改。

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

举报

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

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

进入课程

到底为啥都是9啊

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