zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    <玩转Django2.0>读书笔记:模板和模型
    <玩转Django2.0>读书笔记:URL规则和视图
    学习随笔:Vue.js与Django交互以及Ajax和axios
    <算法图解>读书笔记:第4章 快速排序
    <算法图解>读书笔记:第3章 递归
    <算法图解>读书笔记:第2章 选择排序
    <算法图解>读书笔记:第1章 算法简介
    PostgreSQL自学笔记:与python交互
    AS3 setInterval
    AS3 事件流
  • 原文地址:https://www.cnblogs.com/ftl1012/p/9382652.html
Copyright © 2011-2022 走看看