python 内部函数,闭包

内部函数的定义:
1.可以访问外部函数的变量
2.内部函数可以修改外部函数中可变类型的变量:例如:list
3.内部函数修改全局的不可变变量时,需要在内部函数声明global 变量名
4.内部函数修改外部函数的不可变变量时,需要在内部函数中声明nonlocal 变量名

def func():
    s = 5
    def add():
        nonlocal s
        s += 1
    add()
    return s

result = func()
print(result)
# 输出结果:
6

判断一个函数是否是闭包:
1.在外部函数中定义了内部函数
2.外部函数有返回值
3.返回值是内部函数名
4.内部函数引用过外部函数的变量值

保存返回闭包时的状态(外层函数变量)
重复调用会在上一次调用的值的基础上再计算

def func():
    s = 5
    def add():
        nonlocal s
        s += 1
        print(s)
    return add

result = func()  # 此时result接收到的就是func里的内部函数add
result()  # 相当于调用内部函数add
result()  # 在上一步运算结果的基础上再进行计算
# 输出结果:
6
7

闭包的缺点:
1.作用域没有那么直观;
2.因为变量不会被垃圾回收所以有一定的内存占用问题。

闭包的作用:
1.可以使用同级的作用域;
2.读取其他元素的内部变量;
3.延长作用域

闭包小结
1.闭包似优化了变量,原来需要类对象完成的工作,闭包也可以完成;
2.由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存;
3.闭包的好处,使代码变得简洁,便于阅读代码;
4.闭包是理解装饰器的基础。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值