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

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

 

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

 

posted @ 2018-05-24 22:35  一夜秋2014  Views(1261)  Comments(2Edit  收藏  举报