高阶函数
高阶函数指的是接收函数作为参数的函数,Python 内置的高阶函数有:map() 、reduce() 、filter()
map() 接收一个函数和一个序列作为参数,语法为 map(function, sequence),相当于依次把序列的值交给接收的函数进行处理,例子如下:
In [13]: def square(x): ....: return x ** 2 ....: In [14]: map(square, [1, 2, 3, 4, 5]) Out[14]: [1, 4, 9, 16, 25]
In [16]: map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # map()函数通常与匿名函数结合使用 Out[16]: [1, 4, 9, 16, 25]
reduce() 接收一个函数和一个序列作为参数,语法为 reduce(function, sequence),相当于把序列的值交给接收的函数进行处理,例子如下:
In [5]: def fun(x, y): ...: return x+y ...: In [6]: reduce(fun, [1, 2, 3, 4, 5]) # 把序列的值交给接收的函数进行处理,结果相当于((((1+2)+3)+4)+5) Out[6]: 15 # 注意是先计算前两个的值,再拿第三个序列值交给函数处理,依此类推
In [7]: reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) # reduce()通常与匿名函数结合使用 Out[7]: 15
filter() 用于过滤序列,过滤掉序列中不符合条件的元素,结果返回一个由符合的元素组成的列表;该函数接收两个参数,第一个为函数,第二个为序列,
语法为 filter(function, sequence),表示将序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中
In [9]: def is_odd(n): ...: if n % 2 == 1: ...: return True ...: In [10]: filter(is_odd, range(1, 10)) Out[10]: [1, 3, 5, 7, 9]
In [12]: filter(lambda n: n % 2 == 1, range(1, 10)) # filter()通常与匿名函数结合使用 Out[12]: [1, 3, 5, 7, 9]