• 闭包的应用与理解


           普通函数能完成大功能编写,匿名函数能完成小功能代码编写,而且当作实参非常方便;而闭包比函数方便,拥有函数代码的功能(类似于匿名函数),还能有代码所需要使用数据;而面向对像,实例对象赋值给参数,里面的参数和方法都有,但应用中往往只要一部分,而不是全部,故闭包的优点就能体现出来,就是比面向对象更轻量,不会有多余的东西

    def line(k,b):
        def create_y(x):
            print(k*x+b)
        return create_y
    
    
    line_1 = line(1,2)
    line_1(0)
    line_1(1)
    line_1(2)
    
    line_1 = line(11,22)
    line_1(0)
    line_1(1)
    line_1(2)
    

      输出内容以下:

    2
    3
    4
    22
    33
    44

    代码说明:

    1、line方法返回的是方法create_y的引用,并定义变更k=1,b=2,赋值给变量line_1

    2、执行line_1(0)是,就相当于执行方法create_y,那0就为参数x的值

    3、在create_y方法中,执行k*x+b,在当前方法找不到变量和k,b,因为当前函数是内部函数,就往外部函数找,即往上一层找,在方法line中找到k=1,b=2

    4、再根据这三个参数的值计算返回值

    闭包就是一个函数里面套着另一个函数的定义,一般情况内部函数的功能会用到外部函数的变量,把内部函数和用到的外部函数的变量整体称之为闭包

    函数、匿名函数、闭包、对象,都作为实参时,有什么区别?

    匿名函数能够完成基本的简单功能,传递是这个函数的引用,只有功能

    普通函数能够完成较为复杂的功能,传递是这个函数的引用,只有功能

    闭包能够将较为复杂的功能,传递是这个闭包中的函数以及数据,因为传递是功能+数据

    对象能够完成最为复杂的功能,传递是很多数据+很多功能,因此传递是功能+数据

    闭包的修改,使用nonlocal 语句

       



    **************只要学不死就往死里学!************
  • 相关阅读:
    关于Java的代理模式
    关于Java串行、并行执行——使用Callable多线程
    关于区域表system_district:省市县街道四级地址表
    关于MongoDB在windows下安装
    关于Eureka 服务注册列表显示IP问题研究
    关于开发APP接口版本不兼容的问题
    关于MySQL创建数据库字符集和数据库排序规则的对比选择
    关于MySQL的行转列
    关于MySQL统计一列中不同值的数量方法
    关于Java 8 forEach
  • 原文地址:https://www.cnblogs.com/lxhaaron/p/12671944.html
Copyright © 2020-2023  润新知