• 闭包


    外部嵌套作用域

    # 外部
    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()# 调用内部函数
     
  • 相关阅读:
    C#读取并修改app.congig的实例
    apache:添加cgi模式
    初识golang
    Golang: pprof
    Golang:测试map是否存在
    beego: 获取request参数
    shell:crontab
    初识Iaas,paas
    初识golang
    Go-new和make
  • 原文地址:https://www.cnblogs.com/NeverYa/p/11223612.html
Copyright © 2020-2023  润新知