• Python学习---匿名函数和闭包的学习


    1.1. 匿名函数

    名函数的命名规则:  用lamdba 关键字标识,冒号(:)左侧表示函数接收的参数(a,b) ,冒号(:)右侧表示函数的返回值(a+b)。 因为lamdba在创建时不需要命名,所以,叫匿名函数 

    add = lambda a, b: a * b
    print(add(2, 3))    #  6

    1.2. 函数式编程和命令式编程

    我们常见的编程范式有命令式编程(Imperative programming),函数式编程

    常见的面向对象编程是也是一种命令式编程。

    命令式编程是面向计算机硬件的抽象,有变量(对应着存储单元),赋值语句(获取,存储指令),表达式(内存引用和算术运算)和控制语句(跳转指令),一句话,命令式程序就是一个冯诺依曼机指令序列
    函数式编程是面向数学的抽象,将计算描述为一种表达式求值,一句话,函数式程序就是一个表达式

    函数式编程关心数据的映射,命令式编程关心解决问题的步骤

    1.3. 闭包

    定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure).

    简单讲就是 闭包 = 函数块(内部函数) + 定义内部函数时的(外部)环境变量

    # def outer(x):  # 当这个x变量作为一个形参传入进来的时候,都相当于内部函数的外部变量
    def outer():
        x = 19
        def inner():
            print(x)
        return inner
    # yy = outer(100) # yy()执行的结果就是100,道理相同
    xx = outer()   # outer()已经执行完成了
    xx()           # 19  为什么outer已经执行完了,但是inner()还可以取到x=10值呢?
                   # 闭包(closure)!outer里return的inner是一个闭包函数,有x这个环境变量。
    outer()()      # 19
    # inner()      #  name 'inner' is not defined  作用域是local
    # print(x)     #  name 'x' is not defined   作用域local
  • 相关阅读:
    回文字符串系列问题
    找两个数组的重合数字系列
    IPC最快的方式----共享内存(shared memory)
    【经典算法】——KMP,深入讲解next数组的求解
    关于SqlDateTime溢出的问题
    git操作之常见问题解决方案
    Javascript中length属性的总结
    从零开始学node(一): nodejs开发环境的配置
    使用Number.parseFloat引发的悲剧
    超链接的那些事(三): 属性target
  • 原文地址:https://www.cnblogs.com/ftl1012/p/9382652.html
Copyright © 2020-2023  润新知