闭包

外部嵌套作用域

# 外部
def fun01():
    # 对于fun01而言,a是局部变量
    # 对于fun02而言,a是外部嵌套变量
    a = 10
    # 内部
    def fun02():
        b = 20
        # 可以访问外部变量
        # print(a)
        # 并没有修改外部变量,而是创建了局部变量.
        # a = 100
        # 声明外部变量
        nonlocal a
        a = 100
    fun02()
    print(a)

fun01()     # 100

 闭包

 

1. 三要素:
-- 必须有一个内嵌函数。
-- 内嵌函数必须引用外部函数中变量。
-- 外部函数返回值必须是内嵌函数。
2. 语法
-- 定义:
def 外部函数名(参数):
        外部变量
        def 内部函数名(参数):
            使用外部变量
        return 内部函数名
-- 调用:
       变量 = 外部函数名(参数)
       变量(参数)
3. 定义:在一个函数内部的函数,同时内部函数又引用了外部函数的变量。
4. 本质:闭包是将内部函数和外部函数的执行环境绑定在一起的对象。
5. 优点:内部函数可以使用外部变量。 
6. 缺点:外部变量一直存在于内存中,不会在调用结束后释放,占用内存。
7. 作用:实现python装饰器。
def fun01():
    a = 10

    def fun02():
        print(a)

    return fun02

# re 变量 指向的是 内部函数
re = fun01()# 调用外部函数      ---> 执行完毕后,不释放栈帧.
re()# 调用内部函数

 

 

 

转载于:https://www.cnblogs.com/NeverYa/p/11223612.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值