• 闭包


    定义:多层函数嵌套(一般为两个),而且通常内部函数需要用到外部函数的变量,那么就把内部函数和外部函数中的那些变量值 叫做闭包。

    定义有些抽象,来看例子。如果想实现设计一个一元一次函数,其中斜率k,截距b和变量x 都是需要用户自定义。

     程序如上,当执行这个程序的时候,编译器首先会跳到 line_1 = line(1,2) 这行,随后程序会找到 def line(k,b)这行,再继续到def creat_y(x)这行,

    此时,程序不会执行内层函数中的内容,因为函数只有在被调用的时候才会执行,所以程序执行到def creat_y(x)这行时什么也不会做,直接跳到return creat_y【注意这里没有小括号】。

    此时返回了函数的指向,而不会函数的值。也就是说程序从开始运行到现在返回的结果是 内层函数creat_y的指向。

    而creat_y指向了计算机内存中的一块空间,这块空间中有实参k b和形参x 以及函数creat_y里面的内容【红框里面的东西】。

    所以,当最开始执行line_ = line(1,2)这行时,结果就是line_1指向了红框这个空间,而这个空间中只有x一个形参,k和b都是作为实参从外部函数中被传入到内层函数中去了。

    后面三行,在调用line_1时传入的参数(0,1,2)就是传给红框空间中的x。

     思考:函数、匿名函数、闭包、对象,当作实参时,有什么区别

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

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

    3、闭包能够完成较为复杂的功能,传递的是这个闭包中的函数以及数据,因此传递的是功能+数据。

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

     
     
    --------------------成功,肯定是需要一点一滴积累的--------------------
  • 相关阅读:
    windows 录音程序(二)
    windows 录音程序(一)
    基于VC的ACM音频编程接口压缩Wave音频(三)
    基于VC的ACM音频编程接口压缩Wave音频(二)
    基于VC的ACM音频编程接口压缩Wave音频(一)
    基于VC的声音文件操作(五)
    基于VC的声音文件操作(四)
    2016年,随笔.
    golang 私钥"加密"公钥"解密"
    bt种子文件文件结构
  • 原文地址:https://www.cnblogs.com/GouQ/p/11722170.html
Copyright © 2020-2023  润新知