Python函数式编程(一):高阶函数

Python支持函数式编程,而且用起来也比较容易:本章介绍高阶函数


高阶函数是什么

高阶函数(Higher-Order Function)也成算子或泛函,是包含多于一个箭头的函数,即可以接受一个或多个函数作为本高阶函数的输入

在数学中,微积分中的导数就是常见的例子,因为它映射一个函数到另一个函数


Python的高阶函数

Python丰富的内建函数提供了无限可能!

map函数:映射器,用于更新序列

map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回

def f(x):
    return x*x
r = map(f, [1,2,3,4,5,6,7,8,9])

list(r) #[1,4,9,16,25,36,49,64,81]
print list(map(str, [1,2,3,4,5,6,7,8,9]))
#['1','2','3','4','5','6','7','8','9']

reduce函数:分而治之,逐层累加

reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算

from functools import reduce
def add(x,y):
    return x+y
reduce(add, [1,2,3,4])  #10
from functools import reduce
def fn(x,y):
    return x*10+y
reduce(fn, [1,3,5,7,9]) #13579
from functools import reduce
def fn(x,y):
    return x*10+y
def char2num(s):
    digits={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
    return digits[s]
reduce(fn, map(char2num, '13579'))  #13579

filter函数:过滤器,用于筛选元素

过滤器函数,和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素

注意到filter()函数返回的是一个Iterator,也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list

def is_odd(n):
    return n % 2 ==1
list(filter(is_odd, [1,2,3,4,5,6,7,8,9]))   #[1, 3, 5, 7, 9]

sorted函数

对于较为复杂的对象(如字符串、字典),我们希望它们可以按照我们设想的方式排序

sorted函数即可以作为普通的地低阶函数也可以作为高阶函数看待,这里只讲解它作为高阶函数的方面

key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序, 用sorted()排序的关键在于实现一个映射函数

sorted([3, -4, 0, -99, 98, 2], key=abs)
#[0, 2, 3, -4, 98, -99]

你可能感兴趣的:(Python,语言)