1. 函数式编程(Functional Programming)
- 基于lambda演算的一种编程方式
- 程序中只有函数
- 函数可以作为参数,同样可以作为返回值
- 纯函数式编程语言: LISP, Haskell
- Python函数式编程只是借鉴函数式编程的一些
特点,可以理解成一般函数式,一般Python - 讲述内容
- 高阶函数
- 返回函数
- 匿名函数
- 装饰器
- 偏函数
1.1 lambda表达式(也叫匿名函数)
- 函数:最大程度复用代码
- 存在问题:如果函数很小,代码很短,反而会比较麻烦
- 函数被调用次数少,会造成浪费
- 对于阅读者来说,造成阅读流程被迫中断
- lambda表达式
- 一个表达式,函数体相对简单
- 不是一个代码块,仅仅是一个表达式
- 可以有多个参数,用逗号隔开
- 用法:
1.以lambda开头
2.紧跟一定参数(可以没有)
3.参数后用冒号和表达式主题隔开
4.只是一个表达式,所以没有return
例:
stm = lambda x: 100 * x(计算100的倍数)
stm(90)
1.2 高阶函数
- 把函数作为参数使用的函数叫高阶函数
- 函数名称是变量,可以赋值,可以被当做参数
- 系统高阶函数
- map
- 把集合或者列表里的每一个元素都按照一定规则操作,生产新的列表
或者集合 - 返回一个迭代对象(什么是可迭代?)
- map类型是一个可迭代的结构,可以使用for循环遍历
map(func_name, n)
- 把集合或者列表里的每一个元素都按照一定规则操作,生产新的列表
- reduce
- 归并,缩减
- 把一个可迭代对象最后归并成一个结果
- 对于作为参数的函数要求:必须有两个人参数
- 需要导入functools包
- filter
- 过滤函数:对一组数据进行过滤,符合条件的数据会生成一个新的列表并返回
- 和map相比:
相同点:都对列表每个元素进行逐一操作
区别:
map会生成一个跟原来数据相对应的新列表
filter不一定,只要符合条件的才会进入新数据集合 - filter:
- 利用给定函数进行判断
- 返回值是布尔值
- 调用格式:
filter(f, data) – f是过滤函数,data是数据
- 高阶函数排序
- 把一个序列按照给定算法进行排序
- key:在排序前对每个元素进行key函数运算,可以理解成按照key函数定义的逻辑进行排序
- Python2和Python3相差巨大
- sorted()
- map
- 返回函数###
- 函数可以返回具体指,也可以返回一个函数作为结果
- 闭包(closure)
- 当一个函数在内部定义函数,并且内部的函数应用了外部函数的参数或者局部变量,当
内部函数被当做返回值时,相关参数和变量保存在返回的函数中,这种结果,叫做闭包 - 返回闭包时,返回函数不能引用任何循环变量
- 当一个函数在内部定义函数,并且内部的函数应用了外部函数的参数或者局部变量,当
- 装饰器(decrator)
- 增加函数新功能,又不改动现有代码时,使用装饰器
- 本质上,装饰器是一个返回函数的高阶函数
- 装饰器使用:使用@语法:在每次要扩展到函数定义前使用@+函数名
- 装饰器好处:
一旦定义,则可以装饰任意函数
一旦被其装饰,则把装饰器的功能直接添加到定义函数的功能上
- 偏函数
- 参数固定的函数,相当于有一个特定参数的函数体
- functools.partial:把一个函数某些参数固定,返回一个新函数