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

闭包不太懂,请大神赐教

我的理解是f1,f2,f3在for循环中没有进行相乘的计算,等循环完它们的值都是3后再进行计算,

如果我的理解没问题,那么我想知道,3是怎么赋予f1,f2,f3,的,然后它们是怎么最后计算成9的,不是不进行return i*i吗?

如果理解有误恳请大神解释,希望可以通俗一点,小白听不太懂专业术语,十分感谢!

正在回答

2 回答

fs=[]

    for i in range(1,4):

        def f():

            return i*i

        fs.append(f)

    return fs

f1,f2,f3=count()

print f1(),f2(),f3()

        

注意到   fs.append(f)中传入的为一个函数f,即在list中对应着三个函数地址(试试print f1,f2,f3 会显示为三个地址),调用f1,f2,f3 时则都对应着调用f函数,此时for循环已经结束,最终赋值为3,即return 3*3。

尝试改写函数: fs.append(f()),此时传入list为三个值1,4,9.即[1,4,9],当执行f1,f2,f3=count()语句时,为依次取出list表中的值,即1,4,9

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

weibo_墨鸦墨鸦1_mrAN04 提问者

这下理解了,十分感谢!
2018-11-17 回复 有任何疑惑可以回复我~
#2

shellywsm

更改为fs.append(f())时程序报错,大神我是不是哪里还是没有理解?
2018-12-18 回复 有任何疑惑可以回复我~
#3

慕用6484265 回复 shellywsm

改写成fs.append(f())后,输出的f1,f2,f3就是值而不是函数了,输出改为print f1,f2,f3即可
2018-12-18 回复 有任何疑惑可以回复我~

闭包最大用处有两个,一个是可以读取函数内部的变量,另一个让这些变量的值始终保持在内存中

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

举报

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

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

进入课程

闭包不太懂,请大神赐教

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