zoukankan      html  css  js  c++  java
  • 闭包的应用与理解

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

    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 语句

       



    **************只要学不死就往死里学!************
  • 相关阅读:
    springboot 入门
    json-lib 的 maven dependency 引入及Jar包下载
    DataGridView 使用技巧精华
    SqlServer无备份下误删数据恢复
    Reflector 已经out了,试试ILSpy
    C# 反射,动态编译
    windows8和windows server2012不联网安装.net 3.5(包括2.0和3.0)
    如何附加被分离的质疑数据库? [转]
    easyui validatebox 验证类型
    所见即所得:七大无需编程的DIY开发工具
  • 原文地址:https://www.cnblogs.com/lxhaaron/p/12671944.html
Copyright © 2011-2022 走看看