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

还是看不懂这j的值如何取得,是跟f1,f2,f3有关吗

fs.append(f)为什么不是[1,4,9]一个列表呢?怎么看的

http://img1.sycdn.imooc.com//5aa9f0cb0001662308460415.jpg0=

http://img1.sycdn.imooc.com//5aa9f124000110e806950549.jpg

正在回答

2 回答

其实那个count中形成的fs=[f,f,f],当执行return 时才回去调用那个i值,所以都为9

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

第一个问题,count返回的是一个list,f1,f2,f3依次取返回list结果的下表为0,1,2的结果,由于闭包特性,结果中f1()=i*i,f2()=i*i,f3()=i*i,i是相同的变量且不会被释放,调用f1(),由于i值已经是3了,所以f1()=9,f2()和f3()也是如此,如果不想这样,可以引入局部变量如默认参数,即f() 定义变为 f(m=i),相应的返回结果变为return i*i 变成return m*m,这样每个局部变量m会保留住调用时传入的i的信息

第二个问题:count()返回的是list,f1=count(),f1则为list,而f1()是函数调用,显然list是无法调用的,可以用(f1[0])()这种方式方位list的内容

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

葱烧小黄鱼

为什么调用f1以后i值已经是3了?
2018-03-23 回复 有任何疑惑可以回复我~
#2

葱烧小黄鱼

我大概理解了,不是调用f1之后i变成了3,而是在运行完count()之后→调用f1()之前i变成了3,相当于f1(),f2(),f3()的调用是在调用count()之后进行的,调用count()的时候已经把循环跑完了,i变成了3.
2018-03-23 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

还是看不懂这j的值如何取得,是跟f1,f2,f3有关吗

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