美文网首页
python——闭包

python——闭包

作者: ELLENXX | 来源:发表于2019-07-15 16:42 被阅读0次
    def fnx(x):
        def fny(y):
            return x*y
        return fny
    i=fnx(3)
    print(i)
    

    输出:<function fnx.<locals>.fny at 0x000002B19A2E77B8>

    i=fnx(3),fnx(3)的返回值就是一个函数fny,也就是i指向了内部函数fny

    上面的代码特征:在一个外部函数中定义了一个内函数,内部函数里运用了外部函数的临时变量,并且外函数的返回值是内函数的引用。这是一个闭包。

    当函数执行结束后,会把自己的函数内定义的变量都释放还给内存,之后变量会被请款,但如果是闭包,外部函数执行时,自己的变量会在将来的内部函数中用到,自己在结束的时候,返回内函数的同时,会把外函数的临时变量送给内函数绑定在一起。所以外函数已经结束了,调用内函数的时候仍然能够使用外函数的临时变量。

    def fnx(x):
        def fny(y):
            return x*y
        return fny
    i=fnx(3)
    print(i(4))
    

    输出:12

    如果想要在内部函数中改外部函数的值,可以将外部函数的临时变量变成可修改变量

    def fnp():
        p=[2]
        def fnq():
            p[0]*=p[0]
            return p[0]
        return fnq
    print(fnp()())
    

    输出:4

    还可以使用nonlocal

    def fnp():
        p=3
        def fnq():
            nonlocal p
            p*=p
            return p
        return fnq
    print(fnp()())
    

    输出:9

    相关文章

      网友评论

          本文标题:python——闭包

          本文链接:https://www.haomeiwen.com/subject/tainkctx.html