函数式编程的内建函数

来源:互联网 发布:mac lr怎么导入照片 编辑:程序博客网 时间:2024/04/26 01:31

函数式编程的内建函数


内建函数                                   描述


map(func, seq1[,seq2...]) 将函数 func 作用于给定序列(s)的每个元素,并用一个列表来提
供返回值;如果 func 为 None, func 表现为一个身份函数,返回
一个含有每个序列中元素集合的 n 个元组的列表。
reduce(func, seq[, init]) 将二元函数作用于 seq 序列的元素,每次携带一对(先前的结果
以及下一个序列元素),连续的将现有的结果和下雨给值作用在获
得的随后的结果上,最后减少我们的序列为一个单一的返回值;如
果初始值 init 给定,第一个比较会是 init 和第一个序列元素而不
是序列的头两个元素。
filter(func, seq)(过滤) 调用一个布尔函数 func 来迭代遍历每个 seq 中的元素; 返回一个
使 func 返回值为 ture 的元素的序列。

filter()
在本章中我们研究的第二个内建函数是 filter()。想像下,去一个果园,走的时候带着一包你
从树上采下的苹果。 如果你能通过一个过滤器,将包裹中好的苹果留下,不是一件很令人开心的事
吗?这就是 filter()函数的主要前提。给定一个对象的序列和一个“过滤”函数,每个序列元素都
通过这个过滤器进行筛选, 保留函数返回为真的的对象。filter 函数为已知的序列的每个元素调用
给定布尔函数。每个 filter 返回的非零(true)值元素添加到一个列表中。返回的对象是一个从原
始队列中“过滤后”的队列


如果我们想要用纯 python 编写 filter(),它或许就像这样:
def filter(bool_func, seq):
filtered_seq = []
for eachItem in seq:
if bool_func(eachItem):
filtered_seq.append(eachItem)
return filtered_seq




map()
map()内建函数与 filter()相似,因为它也能通过函数来处理序列。然而,不像 filter(), map()
将函数调用“映射”到每个序列的元素上,并返回一个含有所有返回值的列表。
在最简单的形式中,map()带一个函数和队列, 将函数作用在序列的每个元素上, 然后创建
由每次函数应用组成的返回值列表。所以如果你的映射函数是给每个进入的数字加 2,并且你将这个
函数和一个数字的列表传给 map(),返回的结果列表是和原始集合相同的数字集合,但是每个数字
都加了 2.
如果我们要用 python 编写这个简单形式的 map()如何运作的, 它可能像在图 11-2 中阐释的
如下代码:
def map(func, seq):
mapped_seq = []
for eachItem in seq:
mapped_seq.append(func(eachItem))
return mapped_seq
这里有些使用带多个序列的 map()的例子
>>> map(lambda x, y: x + y, [1,3,5], [2,4,6])
[3, 7, 11]
>>>
>>> map(lambda x, y: (x+y, x-y), [1,3,5], [2,4,6])
[(3, -1), (7, -1), (11, -1)]
>>>
>>> map(None, [1,3,5], [2,4,6])
[(1, 2), (3, 4), (5, 6)]
原创粉丝点击