在函数式编程中,我们可以将函数当作变量一样自由使用。
一个函数接收另一个函数作为参数,这种函数称之为高阶函数。
1.常用高阶函数
1.1 map(func, *iterables)
- 根据提供的函数对指定序列做映射, 并返回映射后的序列。
- 返回的是一个map对象,可以通过list()转为列表
from math import factorial
def square(n):
return n ** 2
# 使用python自带数学函数
facMap = map(factorial, list(range(10)))
print(list(facMap))
# print out: [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]
# 使用自定义函数
squareMap = map(square, list(range(10)))
print(list(squareMap))
# print out: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 使用匿名函数
lamMap = map(lambda x: x * 2, list(range(10)))
print(list(lamMap))
# print out: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
# 传入多个序列
mutiMap = map(lambda x, y: x+y, list(range(10)), list(range(11, 15)))
print(list(mutiMap))
# print out: [11, 13, 15, 17]
1.2 reduce(function, sequence[, initial])
- 传入一个有两个参数的函数,然后用这个函数从左至右顺序遍历序列并生成结果。
- 最后返回函数的计算结果, 和初始参数类型相同。
# 注意,现在 reduce() 函数已经放入到functools包中。
from functools import reduce
result = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])
print(result)
# print out 15
# 设定初始参数:
s = reduce(lambda x, y: x + y, ['1', '2', '3', '4', '5'], "数字 = ")
print(s)
# print out:数字 = 12345
1.3 filter(function or None, iterable)
过滤序列中不符合条件的值
- 返回一个迭代器,该迭代器生成结果为true的iterable项
- function or None # 过滤操作执行的函数。如果函数为None,则返回为true的项。
- iterable # 需要过滤的序列
def boy(n):
if n % 2 == 0:
return True
return False
# 自定义函数
filterList = filter(boy, list(range(20)))
print(list(filterList))
# print out: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
# 自定义函数
filterList2 = filter(lambda n: n % 2 == 0, list(range(20)))
print(list(filterList2))
# print out: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
1.4 sorted(iterable[,key,reverse])
- 默认将序列升序排列后返回一个新的 list
- 还可以自定义键函数key来进行排序
- 也可以设置 reverse 参数确定是升序还是降序
list01 = [5, -1, 3, 6, -7, 8, -11, 2]
list02 = ['apple', 'pig', 'monkey', 'money']
print(sorted(list01))
# print out: [-11, -7, -1, 2, 3, 5, 6, 8]
print(sorted(list01, key=abs))
# print out: [-1, 2, 3, 5, 6, -7, 8, -11]
# 默认升序
print(sorted(list02))
# print out: ['apple', 'money', 'monkey', 'pig']
# 降序
print(sorted(list02, reverse=True))
# print out: ['pig', 'monkey', 'money', 'apple']
# 匿名函数排序
print(sorted(list02, key=lambda x: len(x), reverse=True))
# print out: ['monkey', 'apple', 'money', 'pig']