高阶函数:
变量可以指向函数,函数参数可以传变量,所以一个函数可以调用另一个函数作为参数,这种函数称之为高阶函数
sorted
见 sort 与 sorted一文:https://www.jianshu.com/writer#/notebooks/14787822/notes/60918094
map
![](https://img.haomeiwen.com/i7095153/f1f1be2216f64825.png)
map接收两个参数,一个函数,一个可迭代对象,并把函数作用于可迭代对象的每一个元素,并把结果作为新的迭代器返回(python2.x 返回列表,python3.x返回迭代器)
举例1:将列表的每个元素求平方
li = [1,2,3,4,5,6,7,8]
li_res =map(lambda x:x*x,li)
print(list(li_res))
输出:[1, 4, 9, 16, 25, 36, 49, 64]
举例2:将列表的每个数字转化为字符串
int_list = [1,2,3,4,5,6,7,8]
str_list =map(str,int_list)
print(list(str_list))
输出:['1', '2', '3', '4', '5', '6', '7', '8']
reduce
在python3中,reduce已经不算高阶函数,被放在functools包中:from functools import reduce
作用是:将一个函数作用于一个序列上,这个函数必须接收两个参数,reduce将结果继续和下一个元素做计算,返回的是一个value
![](https://img.haomeiwen.com/i7095153/c6f405bd53fa5fad.png)
举例1:对一个序列求和
from functoolsimport reduce
li = [1,2,3,4,5,6]
li_res = reduce(lambda x,y:x+y,li)
print(li_res)
输出:21
举例2:将一个序列转化为一个整数
from functoolsimport reduce
li = [1,2,3,4,5]
li_res = reduce(lambda x,y:str(x)+str(y),li)
print(int(li_res))
或者
from functoolsimport reduce
li = [1,2,3,4,5]
def f(x,y):
return 10*x+y
li_res = reduce(f,li)
print(li_res)
输出都是12345
filter
与map类似,接收一个函数和一个可迭代对象,不同的是filter将函数作用于每个item,根据返回的结果是True还是False决定是否保留还是丢弃
![](https://img.haomeiwen.com/i7095153/fdd0238231486ae3.png)
举例1:删除偶数,保留奇数
li = [1,2,3,4,5,6]
li_res =filter(lambda x:x%2==0, li)
print(list(li_res))
输出[1, 3, 5]
网友评论