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()
  • 相关阅读:
    Spring 基础知识
    AJAX 基础知识
    Struts2 基础知识
    数据库——视图
    JAVA常见的集合类知识
    jsp同一应用中页面间传值方式
    mongodb 设置数据库管理员登录权限
    java freemark生成word文档
    java 多个文件打包zip
    easyui form提交文件(上传图片和文件)
  • 原文地址:https://www.cnblogs.com/laochun/p/14927540.html
Copyright © 2011-2022 走看看