• 闭包


    1,闭包的形成条件

    (1)函数嵌套

    (2)内部函数使用了外部函数的变量或者参数

    (3)外部函数返回内部函数这个使用了外部函数变量的内部函数称为闭包

    2,闭包的作用

    (1)闭包可以保存外部函数内的变量不会随着外部函数调用而销毁

    def func_out():   # 1,函数嵌套
        num1 = 10     # 外部函数
    
        def func_inner():    # 内部函数
            result = num1 + 10   # 2,内部函数必须使用了外部函数的变量
            print('结果:',result)
    
        return func_inner   # 3,外部函数要返回内部函数,这个使用了外部函数变量的内部函数称为闭包
    new_func = func_out()  # 获取闭包对象
                           # 这个new_func就是闭包
    new_func()             # 执行闭包

    闭包变量

    def func_out():
        num1 = 10
        def func_inner(num2):
            result = num1 + num2
            print('结果:',result)
    
        return func_inner
    new_func = func_out()
    new_func(20)

    闭包使用

    外部函数接收姓名参数
    def confing_name(name):
        # 内部函数保存外部函数的参数并且完成数据显示的组成
        def inner(msg):
            print(name + ":" + msg)
        return inner
    
    # 创建Tom闭包是实例(对象)
    Tom = confing_name("Tom")
    # 创建jerry闭包实例
    jerry = confing_name('jerry')
    
    Tom('回家吃饭拉。。。')
    jerry('我还不俄。。。')

    闭包修改

    # 1,函数嵌套
    def func_out():
        # 外部函数的变量
        num1 = 10
    
        def func_inner():
            # 在闭包内修改外部函数的变量
            # num1 = 20 本意是修改外部函数变量,其实是在闭包内定义了一个局部变量
            # 在闭包内修改外部函数的变量需要使用nonlocal关键字
            nonlocal num1
            num1 = 20
            # 2,内部要使用外部函数的变量
            result = num1 + 10
            print(result)
    
        print('修改前的外部变量:',num1)
        func_inner()
        print('修改后的外部变量:',num1)
        # 3,返回内部函数
        return func_inner
    
    # 创建闭包对象
    new_func = func_out()
    new_func()
  • 相关阅读:
    ES6新特性
    CSS + HTML 鼠标在图片上悬停时的显示文字,移走时文字消失
    APICloud closeToWin和closeWin的使用
    基于vue-cli配置移动端自适应
    Cookies,localStorage,sessionStorage,Web SQL Database(客户端)会话存储学习
    select标签默认选择选项
    MySQL数据库的配置
    jsp定义 ,JSON对象
    eclipse配置
    VS2017 C++编译时出现 "the windows sdk version for 8.1 was not found"解决办法(亲测有效)
  • 原文地址:https://www.cnblogs.com/laochun/p/14927540.html
Copyright © 2020-2023  润新知