Python中闭包的理解

Python中闭包的理解

闭包的使用

1、闭包的特点

1)有内层函数和外层函数,
2)内层函数调用了外层函数的临时变量/参数 ,
3)外层函数返回内层函数的引用

实例:


```python
def fun1():
    a = [1, 2, 3, 4]
    print("i am fun1", a)
    def fun2():
        a[0]+=1
        print("i am fun2",a )
    return fun2

var = fun1()
var()
var()
var()

### 2、闭包的作用:
一般情况下,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。
这样临时变量会保存下来,可以再被调用,就实现了变量的复用。

### 3、闭包中内函数如何修改外函数局部变量
在基本的python语法当中,一个函数可以随意读取全局数据,但是要修改全局数据的时候有两种方法:
1 )global 声明全局变量
2 )全局变量是可变类型数据的时候可以修改
在闭包中也有类似的情况,可以使用nonlocal 关键字声明一个变量,可以是可变类型来进行修改,比如列表。这两种方法来修改闭包变量。即是内函数引用的外函数的变量。
nonlocal 是声明变量可以修改上一层的变量,只能用在嵌套函数中,global 是修改全局变量。

```python
 #修改闭包变量的实例
  # outer是外部函数 a和b都是外函数的临时变量
  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__':
 
     demo = outer(5)
    demo() # 6  11

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值