python的几个内置高阶函数
在开始之前,先大概介绍一下什么是高阶函数,高阶函数就是将函数作为参数,这样的函数就是高阶函数。高阶函数是函数式编程的体现。
map
map(func,lst) ,将传入的函数变量作用到lst的每个元素中,并返回新的结果(python2是返回列表,python3返回迭代器)
下面以计算列表中每个元素的3次方为例来演示(这里用的是python3)
常规写法
def func(x): return pow(x,3) list1 = [1,2,3,4,5,6,7] print(map(func,list1)) <map object at 0x00000260B8B55B50> print(list(map(func,list1))) [1, 8, 27, 64, 125, 216, 343]
lambda写法
list1 = [1,2,3,4,5,6,7] print(map(lambda x:pow(x,3),list1)) print(list(map(lambda x:pow(x,3),list1)))
输出同样的结果,可以自行测试
reduce
语法:reduce(func,lst) , 其中func必须有两个参数,每次func将计算的结果持续和lst的下一个元素做累计计算。
示例:计算list1中各个元素的累加和
常规写法
from functools import reduce def func(x,y): return x+y list1 = [1,2,3,4,5,6,7] print(reduce(func,list1)) 输出的结果是28
lambda写法
from functools import reduce list1 = [1,2,3,4,5,6,7] print(reduce(lambda x,y:x+y,list1))
filter
filter函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。如果要转为列表,只需要用list方法转换即可。
示例:过滤掉list1序列中能被3整除的数
常规写法
list1 = [x for x in range(50)] def func(x): if x % 3 == 0: return x print(list(filter(func,list1))) 输出[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48]
lambda写法
list1 = [x for x in range(50)] print(list(filter(lambda x:x%3==0,list1)))