Python中函数式使用
对于链表来讲,有三个内置函数非常有用: filter(),map() 以及 reduce()。
filter(function, sequence)
返回一个 sequence(序列),包括了给定序列中所有调用 function(item)
后返回值为 true 的元素(如果可能的话,会返回相同的类型)。如果该 序列 (sequence)是一个 str,unicode 或者 tuple,返回值必定是同一类型,否则,它总是 list。例如,以下程序可以计算一个被 3 和 5 整除的序列:
def f(x):
return x % 3 == 0 and x % 5 == 0
print filter(f,range(2,100))
[15, 30, 45, 60, 75, 90]
map(function, sequence)
为每一个元素依次调用 function(item)
并将返回值组成一个链表返回。例如,以下程序输出列表中的元素3次:
def word(x):
return x*3
words = ['1','2','3','4','5','6']
print map(word,words)
['111', '222', '333', '444', '555', '666']
可以传入多个序列,函数也必须要有对应数量的参数,执行时会依次用各序列上对应的元素来调用函数(如果某些序列比其它的短,就用 None
来代替)。如果把 None
做为一个函数传入,则直接返回参数做为替代。例如:
seq1 = range(8) seq2 = range(9,17) def add(x,y): return x+y print map(add,seq1,seq2) [9, 11, 13, 15, 17, 19, 21, 23]
reduce(function, sequence)
返回一个单值,它是这样构造的:首先以序列的前两个元素调用函数function,再以返回值和第三个参数调用,依次执行下去。例如,以下程序计算 1 到 10 的整数之和:
def add(x,y): return x+y print reduce(add,range(1,11))
55