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

初学python的闭包,不知道这样理解有没有错误和理解不到位的地方

初学python的闭包,不知道这样理解有没有错误和理解不到位的地方

def count():#定义一个计算函数

    fs = []#创建一个空的列表

    for i in range(1, 4):#循环条件i从1到三

        def f():#本来想创建一个闭包的错误函数

             return i*i#返回值是i的平方

        fs.append(f)#往空列表依次增加刚刚定义的函数

    return fs#返回空的列表

 

f1, f2, f3 = count()#依次把count里面的三个函数赋给f1, f2, f3

print f1(),f2().f3()#之所以三个函数的返回值均为9是因为f1()的调用时基于i等于3,故产生了错误的值。

 

 

 

 

 

def count():

    fs = []

    for i in range(1, 4):#以下是正确的闭包

        def f(j):#定义函数f(j)  j为形参

            def g():#定义函数g

                return j*j#返回值为j的平方

            return g   #返回值为函数g

           

           

        fs.append(f(i))#每i变化一次都往里面list里面放入一个函数g,且里面的形参至关重要为外函数的i,故每次调用f1()不会因为i已经变为三而出错

    return fs

 

f1, f2, f3 = count()

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

另外应该需要注意fs.append(f())与fs.append(f)的区别


正在回答

5 回答

兄弟不错啊,居然不是最佳答案

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

最后一句话,一语惊醒梦中人,我说怎么看了半天觉得题目有问题呢,原来list里面的元素都是函数。我真是太粗心了。

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

都需要再进行函数调用才会返回值

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

列表里面append进去的都是地址

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

兄弟,看好你,不错

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

举报

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

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

进入课程

初学python的闭包,不知道这样理解有没有错误和理解不到位的地方

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