课程
/后端开发
/Python
/python进阶
实在不懂为什么这个函数的输出最后只有一个元素,求大神写出详细流程
2017-09-01
源自:python进阶 2-9
正在回答
明白了, 在for 循环时,随着i 的变化, f()一直在重新定义,最后循环结束, f()的定义就是 i=3时的定义。而 fs中添加的元素只是 f 函数,相当有fs 中的元素 都是 f,那么根据最后定义的一次 f() 函数是i = 3,所以 fs 中的所有元素便是 i=3 的f 函数,结果全为9
终于明白了,count()返回的是一个数组,f1,f2,f3代表的是数组里的三个元素(这三个元素都是指向f的函数),还以为f1,f2,f3分别调用了count()函数呢,所以觉得他们都应该是数组,其实他们就是三个值
不会输出只有一个元素啊,你的count()函数返回了一个列表,这个列表包含三个函数名称f,最后一行相当于分别给使1,f2,f3指向了f函数名称。
我猜想题主想问的可能是为什么最后print f1(), f2(), f3()时输出的是9,这个就请参考lazy function的概念进行思考吧。
将fs.append(f)改为fs.append(f())即可
kubert桥泊
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函数返回一个数组,数组中有三个函数。
至于这三个函数做了什么,你可以再细致的分析。
举报
学习函数式、模块和面向对象编程,掌握Python高级程序设计
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号