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

猜你喜欢

转载自www.cnblogs.com/ftl1012/p/9382652.html