闭包在Python中的应用

闭包在Python中是一种重要的编程概念,涉及到内部函数对外部变量的引用。当外部函数返回内部函数的引用时,形成闭包。文章讨论了如何在Python3中通过nonlocal关键字修改外部函数变量,而在Python2中利用可变类型数据如列表进行修改。同时强调,闭包变量在多次调用内部函数时,始终共享同一份数据。
摘要由CSDN通过智能技术生成

闭包其实就是在函数(外部函数)内部添加一个函数(称为内部函数),内部函数使用外部函数的临时变量,并且外部函数的返回值是内部函数的引用。
例如:

   #outer是外部函数 a和b都是外函数的临时变量
  def outer( a ):
      b = 10
     # inner是内部函数
      def inner():
          #在内函数中 用到了外函数的临时变量
          print(a+b)
      # 外函数的返回值是内函数的引用
     return inner
 
 if __name__ == '__main__':
     #我们调用外部函数,传入参数1
     test1=outer(1#调用
     test1()
     #返回结果为11

那么问题来了,我们怎么修改外部函数的变量呢?
1 ,在python3中,可以用nonlocal 关键字声明 一个变量, 表示这个变量不是局部变量空间的变量,需要向上一层变量空间找这个变量。

2, 在python2中,没有nonlocal这个关键字,我们可以把闭包变量改成可变类型数据进行修改,例如列表。

def outer( a ):
    b = 10  # a和b都是闭包变量
     c = [a] #这里对应修改闭包变量的方法2
     # inner是内函数
     def inner():
          #内函数中想修改闭包变量
          # 方法1 nonlocal关键字声明
         nonlocal  b
        b+=1
         # 方法二,把闭包变量修改成可变数据类型 比如列表
         c[0] += 1
        print(c[0])
         print(b)
     # 外函数的返回值是内函数的引用
     return inner
 
 if __name__ == '__main__':
 
     test1 = outer(1)
     test1() 
     #返回值为2,11

还有一点需要注意:使用闭包的过程中,一旦外函数被调用一次返回了内函数的引用,虽然每次调用内函数,是开启一个函数执行过后消亡,但是闭包变量实际上只有一份,每次开启内函数都在使用同一份闭包变量
例如:

  def outer(x):
      def inner(y):
          nonlocal x
          x+=y
          return x
      return inner
  
  
 a = outer(10)
 print(a(1)) //11
 print(a(3)) //14
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值