Python 高阶函数

简介

高阶函数是一种将函数作为参数,或者把函数作为结果返回的函数。map 、 reduce 、 filter 、 sorted 就是高阶函数的典型例子。

map 函数

map 函数的作用是将一个列表映射到另一个列表。

# map(function, sequence)

def function1(x):
return x*2

def function2(x, y):
return x * y

def function3(t):
return t[0] + t[1] + t[2]

def function4(x):
return x, x**2

s1 = [1, 2, 3, 4]
s2 = [2, 3, 4, 5]
s3 = [3, 4, 5, 6]

print(map(function1, s1))
# [2, 4, 6, 8]

print(map(function2, s1, s2))
# [2, 6, 12, 20]

print(map(function3, zip(s1, s2, s3)))
# [6, 9, 12, 15]

print(map(function4, s1))
# [(1, 1), (2, 4), (3, 9), (4, 16)]

上面的四个函数,根据参数的个数,参数的类型,返回值的个数,返回值的类型来测试map函数。

reduce 函数

reduce 的作用是将一个列表归纳为一个输出。

有三个参数分别是 fucntion 、 sequence 、 startValue 。function 必须是带有两个参数的函数。startValue 可以不设置,初始化值,如果不设置那么初始化运算使用 sequence 的 s[0] 和 s[1] 进行运算,设置则是startValue 和 s[0] 运算,然后依次计算 fucntion(s[1], s[2]) ……

# reduce(function, sequence, startValue)

def function1(x):
return x*2

def function2(x, y):
return x * y

def function3(t):
return t[0] + t[1] + t[2]

def function4(x):
return x, x**2

s1 = [1, 2, 3, 4]
s2 = [2, 3, 4, 5]
s3 = [3, 4, 5, 6]

print(reduce(function2, s1))
# 24

print(reduce(function2, s1, 2))
# 48

filter 函数

filter 函数是过滤掉列表中的一些元素。

这里要注意的是 filter 通过函数的返回的 bool 值来判断是否过滤,最好设置为 true or false。

def function5(x):
return x % 2

s1 = [1, 2, 3, 4]

print(filter(function5, s1))
# [1, 3]

sorted 函数

接收一个 key 函数来实现自定义的排序。

普通排序
# sorted(iterable, key=None, reverse=False)  

>>> sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]
绝对值排序
>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]

参考资料