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

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

https://www.cnblogs.com/qk2014/p/9085524.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值