助力函数式编程

虽然Python中“万般皆下品,惟有对象高”,但函数式编程也不是不能用,并且Python提供了一些有助于进行函数式编程的函数:map、filter和reduce。python

下面简单来看下它们的做用:编程

一、map()

语法:函数式编程

map(f,seq)函数

参数解析:code

  f — 函数对象

  seq — 序列blog

做用:将序列中全部的元素传递给函数。class

这样获得的结果是一个Iterator,Iterator是惰性序列,所以经过list()函数让它把整个序列都计算出来并返回一个list:import

>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']

二、filter()

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

例如:在一个数字序列中[1,2,3,4,5,6,7,8,9,10],取出全部偶数,就能够这样写:

def is_odd(n):
    return n % 2 == 0

list(filter(is_odd,[1,2,3,4,5,6,7,8,9,10]))

注意filter()的结果也是一个Iterator,故经过list()函数让它把整个序列都计算出来并返回一个list。

三、reduce()

函数reduce()是模块functools中的,因此须要导入才能用。

语法同map()同样,可是reduce()的第一个参数fn函数必须接收两个参数,由于reduce()的做用是使用指定的函数fn将序列的前两个元素合二为一,再将结果与第三个元素合二为一,以此类推,直处处理完整个序列并获得一个结果。

效果就是:

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

例如:能够用reduce实现一个求和:

from functools import reduce

def add(x,y):
    return x + y

reduce(add, [2,4,6,8,10])

固然就本例而言,彻底不如使用内置的sum。

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息