高阶函数:就是将函数当成参数传递的一种函数;
上代码:
def add(x,y,fun):
return fun(x)+fun(y)
print(add(-6,3,abs)) #abs为函数调用而abs就是函数本身
#结果为9
Python有一些内建的高阶函数
map()
map()函数接收两个参数,一个是函数,一个是序列。通过函数来处理序列。map传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
如果我们用python编写简单的map()函数代码如下:
def map(func,seq):
mapped_seq = []
for eachItem in seq:
mapped_seq.append(func(eachItem))
return mapped_seq
我们用一个简短的lambda函数来展示如何用map()处理实际数据:
>>>map((lambda x:x+2),[0,1,2,3,4,5])
[2,3,4,5,6,7]
#映射函数是对每个数加2,并且将这个函数和一个数字的列表传给map(),返回的结果列表是和原始集合相同的数字集合,但是每个数字都加了2
为了更加的巩固熟悉再看一个例子:
>>>map(str,[1,2,3,4,5,6,7,8])
['1','2','3','4','5','6','7','8']
#将列表中的数字转化成字符
reduce()
reduce把一个函数作用在序列上,这个函数必须接受两个参数,reduce把结果继续和序列的下一个元素累积计算。
reduce(func,[1,2,3]) = func(func(1,2),3)
老规矩试着用纯python实现reduce()
def reduce (func,seq,init=None):
Iseq = list(seq)
if init is None:
res = lseq.pop(0)
else:
res = init
for item in lseq:
res = bin_func(res,item)
return res
那reduce的用法是怎么样的呢?
reduce((lambda x,y:x+y),range(5))
10
#用头两个元素(0,1)调用函数相加得到1,然后再用这个结果和下一个元素2来调用函数进行相加,以此类推最终得到的结果是10
再来看一个例子:将[1.2.3.4.5]变为12345
def total(x,y):
return x*10+y
reduce(total,[1,2,3,4,5])
#结果是:12345
结束啦!!!