函数式编程(Function Programming)
它是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用,而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能就得到不同的输出,因此,这种函数是有副作用的。 Python不是纯函数式编程语言,允许使用变量。
函数式编程的一个最大的特点是允许函数本身作为参数传入另一个函数中,还允许返回一个函数。
高阶函数
函数名也是变量,函数名其实就是指向函数的变量。
把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。
|
|
map/reduce
map
reduce
reduce 把一个函数作用在一个序列 [x1,x2,x3,x4]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,效果如下:
reduce(f,[x1,x2,x3,x4])=f(f(f(x1,x2),x3),x4)
|
|
map和reduce的综合应用
filter()
用于过滤序列,和map()类似,把传入的函数依次作用于每个元素,然后根据返回值是True 或者是false决定保留还是丢弃该元素,也就是说传入的函数返回值是true或者false,该传入的函数是筛选函数。filter()函数返回的是一个Iterator,是一个惰性序列,需要list()返回所有结果。
|
|
sorted()
排序函数,是一个高阶函数,可以接收一个key函数来实现自定义排序
|
|
返回函数
高阶函数既可以接受函数作为参数,也可以把函数作为结果值返回。
|
|
匿名函数
关键字lambda表示匿名函数,lambda x:x*x
表示的是:
|
|
匿名函数的好处是,函数没有名字,不用担心函数名冲突,不用写return,冒号后面的就是返回值,匿名函数也是一个函数对象,可以赋值给一个变量,利用变量来调用函数。每个函数对象
装饰器(Decorator)
代码运行期间动态增加功能的方式为装饰器, 本质上,decorator是一个返回函数的高阶函数,语法是:
|
|
偏函数(Partial function)
在模块functools中,functools.partial 是创建一个偏函数,例如:
|
|