Python_高阶函数

Python_高阶函数

可接收其他函数作为参数的函数称为高阶函数, map/reduce/filter 是 Python 中较为常用的内建高阶函数.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def higher_order_function(fun, arr):
return [fun(x) for x in arr]

def double(x):
return x*2

def square(x):
return x**2

def main():
arr = [1, 2, 3, 4]
print(higher_order_function(double, arr))
print(higher_order_function(square, arr))

main()
[2, 4, 6, 8]
[1, 4, 9, 16]

map

map 函数的使用形式如下:

map(function, sequence)


解释:对 sequence 中的 item 依次执行 function(item),并将结果组成一个 List 返回,也就是:
[function(item1), function(item2), function(item3), …]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def double(x):
return x*2

def square(x):
return x**2

def main():
arr = [1, 2, 3, 4]
result_list1 = list(map(square, arr))
result_list2 = list(map(lambda x: x**2, arr))
print(result_list1)
print(result_list2)
func_list = [double, square]
n = 5
result_list3 = list(map(lambda x : x(n), func_list))
print(result_list3)

main()
[1, 4, 9, 16]
[1, 4, 9, 16]
[10, 25]

reduce

reduce 函数的使用形式如下:

reduce(function, sequence[, initial])


解释:先将 sequence 的前两个 item 传给 function,即 function(item1, item2),函数的返回值和 sequence 的下一个 item 再传给 function,即 function(function(item1, item2), item3),如此迭代,直到 sequence 没有元素,如果有 initial,则作为初始值调用。

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

1
2
3
from functools import reduce
print(reduce(lambda x, y: x * y, [1, 2, 3, 4])) # 相当于 ((1 * 2) * 3) * 4
print(reduce(lambda x, y: x * y, [1, 2, 3, 4], 5)) # 相当于 (((5 * 1) * 2) * 3) * 4
24
120

filter

filter 函数用于过滤元素,它的使用形式如下:

filter(function, sequnce)


解释:将 function 依次作用于 sequnce 的每个 item,即 function(item),将返回值为 True 的 item 组成一个 List/String/Tuple (取决于 sequnce 的类型,python3 统一返回迭代器) 返回。

1
2
even_num = list(filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5, 6]))
print(even_num)
[2, 4, 6]

注意在 python2 和 python3 中,map/reduce/filter 的返回值类型有所不同,python2 返回的是基本数据类型,而 python3 则返回了迭代器.