能够把函数当成参数传递的参数就是高阶函数
map
1 map:
2 功能: 拿iterable的每一个元素放入func中,
3 func的返回值放入迭代器内进行返回
4
5 参数: iterable, func
6 返回: 迭代器
7
8 # ["a","c","b"] => [97,99,98]
9 dictvar = {97:"a",98:"b",99:'c',100:'d',101:'e'}
10 def func(x):
11 print(1)
12 for k, v in dictvar.items():
13 if v == x:
14 return k
15 li = ["a","c","b"]
16 res = map(func, li)
17 print(list(res))
reduce
1 # 需要导入
2 from functools import reduce
3 """
4 功能: 第一次拿出iterable的元素, 放入func中进行计算
5 计算结果再和iterable的下一个元素传入func进行计算,
6 以此类推直到最后一个,计算的结果作为返回值返回
7 参数: func iterable
8 返回: 最后一次调用func的计算结果
9
10 """
11
12 # (1)[5,4,8,8] => 整型5488
13 li = [5,4,8,8]
14 def func(x, y):
15 return x*10 + y
16 res = reduce(func, li)
17 print(res)
sorted
"""
功能: 把iterable的每一个元素放入func中获取返回值,
按照返回值对原元素进行排序(不会修改原变量)
参数: iterable, reverse(False默认从小到大), key=func
返回值: 排序后的一个列表
如果func返回值一样, 就按照字面顺序不动
[-1, -11, 99, 89] 余数都是9,
排序后与原列表保持一致(无论正序倒序)
"""
listvar = (3.14,56,-9,1)
res = sorted(listvar, reverse=False) # 小到大
res = sorted(listvar, reverse=True) # 大到小
print(res)
# 使用abs()进行绝对值排序
listvar = [-1,99,78,-33]
res = sorted(listvar, reverse=True, key=abs)
print(res)
# 按照余数排序
def func(x):
return x % 10
listvar = [-1,99,78,-33]
res = sorted(listvar, key=func)
print(res)
filter
1 """
2 功能: 过滤,
3 把iterable的每一个元素依次放入func,
4 返回True就保留, 返回False就丢弃
5 参数: func, iterable
6 返回: 过滤后的迭代器
7 """
8
9 listvar = [1,2,3,4,5,6,7,8,9]
10 # 过滤所有的奇数 要偶数
11 def func(x):
12 if x % 2==0:
13 return True
14 return False
15
16 res = filter(func, listvar)
17 print(list(res))
18
19
20 # 使用lambda简化
21 res = filter(lambda x : True if x%2==0 else False, listvar)
22
23 print(list(res))