python成长日迹--闭包

python中的闭包从表现形式上定义(解释)为:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。

首先我们来理解第一个条件:在一个内部函数里,也就是闭包是一个内嵌函数

例如:我们写一个简单的计算函数

def compute():
    def add():      #此时这个add函数就是copute函数下的一个嵌套函数
        pass

接下来我们看第二个条件:对外部作用域(但不是全局作用域)的变量进行引用

优化:

def compute():
    a = 1
    b = 2   #我们在内嵌函数外部定义了两个变量,为了让它在内嵌函数中调用

    def add():  # 此时这个add函数就是copute函数下的一个嵌套函数
        print(a+b)  #内嵌函数调用了外部变量

至此闭包就创建完成,那我们如何使用这个闭包呢?

首先我们需使用return返回这个内嵌函数

def compute():
    a = 1
    b = 2  #我们在内嵌函数外部定义了两个变量,为了让它在内嵌函数中调用

    def add():  # 此时这个add函数就是copute函数下的一个嵌套函数
        print(a+b)  #内嵌函数调用了外部变量
    return add
# 接下来我们调用这个函数
#我们使用result接收compute这个函数
result=compute()    #就相当于(result=compute()=add)我们间接地得到了这个内嵌函数的函数名
result()    #结果:3    相当于add(),这个闭包实际上已经脱离了它的上级函数

# 再次优化

def compute(a,b):
#此时我们将之前的两个变量a,b当做compute函数下的两个形参,不管是定义两个变量还是用作形参,都是内嵌函数的外部变量

    def add():  # 此时这个add函数就是copute函数下的一个嵌套函数
        print(a+b)  #内嵌函数调用了外部变量
    return add
result=compute(3,5) #这样我们就可以动态的使用这个闭包了
result()
  • 在此基础上我们还可进行扩展,我们的局限性并不是只用两个数进行相加,我们如果要用多个数进行运算,那么就使用到函数参数中的动态参数*args/**kwargs

这里就不过多演示了,大家可以自己练习一下

总结闭包的三个条件:

  • 首先是内嵌函数

  • 该内嵌函数调用了外部变量(不包括全局变量)

  • 必须返回该内嵌函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值