python中闭包的理解


闭包的三个条件:

1、函数(外函数)中定义了内函数;2、内函数使用了外函数的非全局变量;3、外函数最终返回的是内函数的引用。

简单闭包事例:

#outerfunc为外函数
def outerfunc(x):
    y = 10     #x,y都是外函数的非全局变量

    #innerfunc是内函数
    def innerfunc():

        #内函数使用了外函数的非全局变量
        return x * y

    #外函数最终返回的是内函数的引用
    return innerfunc

然后执行如下代码:

func = outerfunc(2)

func()

输出 20

 

因为外函数最终返回的是内函数的引用,所以变量func为内函数innerfunc的引用,

func(),变量后面加了括号,则是执行内函数,所以最终结果为20。

 

再看下面的例子:

def outerfunc(x):

    def innerfunc(y):

        return x * y

    return innerfunc




func = outerfunc(2)
print(func(3))
print(func(4))

输出结果分别为6和8

print(func(3)):因为func是内函数的引用,参数2是外函数的变量,被内函数使用,而func(3)执行的是内函数,3是传给内函数的参数,所以结果为6

print(func(4))也是同样的道理。

 

上面的代码改下,如下:

def outerfunc(x):

    def innerfunc(y):

        return x

    return innerfunc




func = outerfunc(2)
print(func(3))
print(func(30))

上面输出都是2

因为内函数只用到了外函数的变量

 

以上是本人的理解,有误望谅解,欢迎指正。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM