zoukankan      html  css  js  c++  java
  • 闭包

    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()
  • 相关阅读:
    浙江嘉兴徒步游
    进阶攻略|最全的前端开源JS框架和库
    进阶攻略|最全的前端开源JS框架和库
    Java EE (9) -- JDBC & JTA
    进制转换
    高精度简单练习 【模板】
    T1683 车厢重组 codevs
    T1075 明明的随机数 codevs
    T5090 众数 codevs
    P3372 【模板】线段树 1 洛谷
  • 原文地址:https://www.cnblogs.com/laochun/p/14927540.html
Copyright © 2011-2022 走看看