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

【转】weixin_慕仔4492420

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

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

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

        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已经变为3而出错

    return fs

 

f1, f2, f3 = count()

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

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


正在回答

5 回答

解释的详细了,好?

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

挺好的例子,对理解很有帮助,谢谢题主?

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

厉害  说到底还是因为自己没明白闭包的含义

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

我说呢f1()的调用时基于i等于3???

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

茅塞初开、稍有顿悟、

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

举报

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

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

进入课程

【转】weixin_慕仔4492420

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