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

关于闭包问题。

def count():
fs=[]
for i in range(1,4):
def f()
return i*i
fs.append(f)
return fs
# 闭包的概念是内层函数引用了外层函数的参数,并且外层函数返回的是内层函数,但是这道例题外层没有参数啊?内层函数哪里引用外层参数了?然后内层函数定义是f(),为什么外层函数为什么返回的是fs而不是f?疑惑比较多,求大神解答。。。这一节卡了好久了,泪。。。

正在回答

3 回答

append 加入的是函数,不是函数调用,也就是说在执行count()的时候,循环中f里的代码段并没有执行,append将方法放入fs,在count执行完后,i经过循环已经变成3,此时执行f(),得到3*3=9

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

Huang小明 提问者

谢啦,有点懂了~
2016-10-20 回复 有任何疑惑可以回复我~
#2

Huang小明 提问者

大神大神,还有个问题就是这个程序(任务里正确的过程)为什么要调用三次f1,f2,f3=count()?为什么不是直接调用一次fs=count(),然后得出的结果是一个list=[1,4,9]
2016-10-20 回复 有任何疑惑可以回复我~
#3

qq_天涯浪子心_03565514 回复 Huang小明 提问者

当一个函数返回多个参数回来时,默认返回是一个tuple,如果你直接用一个tuple接收效果是一样的,而且返回的不是(1,4,5),应该是(f,f,f)
2016-10-20 回复 有任何疑惑可以回复我~
#4

qq_天涯浪子心_03565514 回复 Huang小明 提问者

不好意思,这里返回一个值,返回的是一个[f,f,f],然后对,f1,f2,f3依次赋值,可以令fs=count()
2016-10-20 回复 有任何疑惑可以回复我~
查看1条回复

什么时候执行内函数的i*i啊,我理解是fs[]里面存了三个函数。。。这3个函数又不会被调用


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

呵呵呵呵呵呵呵哈哈哈哈

哦哦,我知道了f1是一个函数类型,f1()就会执行内函数f()了
2017-01-18 回复 有任何疑惑可以回复我~

同上哦

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

举报

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

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

进入课程

关于闭包问题。

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