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

哪位大神能解释下这个函数运行的流程

实在不懂为什么这个函数的输出最后只有一个元素,求大神写出详细流程

http://static.mukewang.com/img/59a8fe330001e11503620223.jpg

正在回答

5 回答

明白了, 在for 循环时,随着i 的变化,  f()一直在重新定义,最后循环结束, f()的定义就是  i=3时的定义。而 fs中添加的元素只是 f 函数,相当有fs 中的元素 都是 f,那么根据最后定义的一次 f() 函数是i = 3,所以 fs 中的所有元素便是 i=3 的f 函数,结果全为9

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

终于明白了,count()返回的是一个数组,f1,f2,f3代表的是数组里的三个元素(这三个元素都是指向f的函数),还以为f1,f2,f3分别调用了count()函数呢,所以觉得他们都应该是数组,其实他们就是三个值

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

不会输出只有一个元素啊,你的count()函数返回了一个列表,这个列表包含三个函数名称f,最后一行相当于分别给使1,f2,f3指向了f函数名称。

我猜想题主想问的可能是为什么最后print f1(), f2(), f3()时输出的是9,这个就请参考lazy function的概念进行思考吧。

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

将fs.append(f)改为fs.append(f())即可

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

kubert桥泊

他要求的是一次返回三个函数.
2017-09-04 回复 有任何疑惑可以回复我~
def count():
    fs = []
    # do somethine
    return fs

先这么看 count返回一个数组。 你的问题完美解决了。

再看这个数组里到底是啥

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

重点是fs.append(f)

而f是一个函数,所以循环了3次,往fs里面加了三个函数。


那最后的答案就是count函数返回一个数组,数组中有三个函数。

至于这三个函数做了什么,你可以再细致的分析。

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

举报

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

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

进入课程

哪位大神能解释下这个函数运行的流程

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号