Python中的函数是一个对象,既可以作为输入参数,也可以作为返回结果。在这里聊聊几个常用的高阶函数,来看看函数是如何被作为输入参数/返回结果来使用的。
1、map() 映射函数
语法:map(function,Iterator)
function指函数名称,Iterator指一个可迭代对象如列表。
用途:遍历Iterator中的每一个元素,执行函数function
# 直接使用lambda 临时函数
items=[1, 3, 9, 10]
list(map(lambda x:x+1, items))
# 先定义函数,再传入函数名
def plus1(x):
x += 1
return x
# 注:这里是 plus1 而不是 plus1()
list(map(plus1, items))
2、reduce() 规约函数
用途:reduce() 函数会对参数序列中元素进行累积。
执行过程:
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:
用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果
def sumTotal(x,y):
return x + y
from functools import reduce
#
print(reduce(sumTotal,items))
# 直接传入lambda函数
print(reduce(lambda x,y:x+y,items))
3、filter() 过滤函数
用途: 用来过滤序列
调用方式:
filter(函数名,对象名)把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素
返回值:
是一个Iterator,也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list
def is_odd(n):
return n % 2 == 1
# 查看返回类型,是一个filter对象
type(filter(is_odd, [1, 3, 4, 9]))
# <class 'filter'>
# 用list()输出
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
#%% 去掉序列中的空字符串
def not_empty(s):
return s and s.strip()
list(filter(not_empty, ['A', '', 'B', None, 'C', ' ']))
4、sorted() 排序函数
既可以使用默认的升序,也可以通过传入函数来实现自定义排序
# 默认按升序
print(sorted([36, 5, -12, 9, -21]))
# [-21, -12, 5, 9, 36]
# 传入函数,按绝对值升序
print(sorted([36, 5, -12, 9, -21], key=abs))
# [5, 9, -12, -21, 36]
# 忽略大小写
print(sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower))
#%% 反向排序
print(sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True))