***高阶函数
知识的1、函数本身可以赋值给变量,即:变量可以指向函数
知识点2、函数名也是变量
知识点3、函数的参数能够接受别的函数,这种函数为高阶函数
如:
def add(x,y,f):
return f(x) + f(y)
Python内建了map()和reduce()
***高阶函数map()
map()函数接受两个参数,1个是函数,一个是序列,把序列的每一个元素按函数的方式进行计算,计算的返回值即是map()函数的返回值(一个序列)
map()把运算规则抽象了,除了计算简单的f(x)=x*x,而且还可以计算复杂的函数,比如map(str,[1,2,3,4,5,6,7,8,9])
***高阶函数reduce()
reduce()函数也接受两个参数(1个是函数,一个是序列),也是把函数作用在序列上(如[x1,x2,x3,x4,x5]),但是该参数函数必须接受2个参数,reduce继续把结果和下一个序列元素做累积计算,
其效果即是reduce(f,[x1,x2,x3,x4,x5]) = f(f(f(f(x1,x2),x3),x4),x5)
>>> def fn(x,y):
return x*10 + y
>>> reduce(fn,[1,2,3,4,5])
12345
***高阶函数filter()
Python内建的filter()函数用于过滤序列
和map()类似,filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
在一个list中,删掉偶数,只保留奇数,可以这么写
def is_odd(n):
return n % 2 == 1
filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])
# 结果: [1, 5, 9, 15]
用filter()这个高阶函数,关键在于正确实现一个“筛选”函数
***高阶函数sorted()和排序算法
Python内建的sorted()函数可以对list进行排序
通常规定,对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。
另外,sorted()也是一个高阶函数,可以接收一个自定义的比较函数实现自定义的排序
如sorted([36, 5, 12, 9, 21], lambda x, y: y - x) 和sorted([36, 5, 12, 9, 21][::-1]
高阶函数总结:
1、map\reduce\filter\sorted函数都可以接收一个函数f和一个序列L,区别是:
map函数把序列中的各个元素都按f进行执行,返回一个序列
reduce函数把序列计算前2个的结果,然后用结果继续后后面的元素组成函数参数进行计算,一直累积计算,直到返回结果,返回值是一个结果值
filter函数用于过滤序列,自定义过滤规则。返回一个序列
sorted用于排序序列,可以自定义排序规则。返回一个序列