在Python中,有三个函数是我们编程过程中经常会使用到的,在很多时候可以帮助我们解决很多麻烦的事情,它们分别是:@filter(function, sequence)@,@map(function,sequence)@和@reduce(function,sequence)@。

filter(function,sequence)

将 sequence 中的所有元素都作为参数传递给 function 参数指定的函数,如果该函数返回 True,则将该元素追加到结果集中,当整个 sequence 全部遍历完了之后,返回结果集,示例如下(该示例将找到出所有不能同时被 2 和 3 整除的数:

>>> def f(x): return x % 2 != 0 and x % 3 != 0
...
>>> filter(f,range(2,25))
[5, 7, 11, 13, 17, 19, 23]

map(function, sequence)

该函数将 sequence 中的所有元素都传递给 function 所指定的函数,将处理得到的结果加入以 sequence 中元素的顺序加入到结果集中,并返回结果集,如下所示,将求出 sequence 序列中所有数的立方:

>>> def cube(x): return x*x*x
...
>>> map(cube, range(1,11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

reduce(function, sequence)

该函数将只返回一个结果,其处理方式是:首先是将 sequence 中的第 0 位 和第 1 位元素传递给 function 所指定的函数,得到的结果作为下一次运算的一个参数,并且把 sequence 中的下一位元素作为另一个参数,如此直至 sequence 的所有元素都参与了运算,之后返回结果,如下示例将求出序列中的所有数的总和:

>>> def add(x,y): return x+y
...
>>> reduce(add,range(1,11))
55

使用 lambda 函数

很多时候我们传递给上面所说的三个函数的 函数 都是非常简单的,这个时候我们可以使用的 lambda 函数,比如上面三个示例我们可以像下面这么写:

>>> filter(lambda x: x % 2 != 0 and x % 3 != 0, range(2,25))
[5, 7, 11, 13, 17, 19, 23]
>>> map(lambda x: x*x*x, range(1,11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
>>> reduce(lambda x,y:x+y, range(1,11))
55

而对于 lambda 函数,我们还可以把多个lambda 函数都保存到一个字典中,如下面这样的方法去使用:

>>> lfs = {'check':lambda x: x % 2 != 0 and x % 3 != 0,
... 'cube':lambda x: x*x*x, 'add': lambda x,y: x+y}
>>> filter(lfs['check'], range(2,25))
[5, 7, 11, 13, 17, 19, 23]
>>> filter(lfs['cube'], range(1,11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> reduce(lfs['add'], range(1,11))
55

标签: none

评论已关闭