[Python]函数式编程的4个常用内建函数

时间:2021-08-11 18:32:41

apply(func[,nkw][,kw]) 用可选的参数来调用func,nkw为非关键字参数,kw为关键字参数;返回值是函数调用的返回值。

例:

import random

seq = range(10)
random.shuffle(seq);
print seq
seq2 = range(10)
random.shuffle(seq2)
print seq2

print apply(lambda x:x**2,[2])
print apply(lambda x,y:x+y,[2,4])
print apply(lambda x,y,z:x**2+y**2+z**2,[2,3,4])
[2, 7, 3, 8, 1, 9, 4, 6, 5, 0]
[0, 4, 8, 1, 6, 5, 7, 2, 9, 3]
4
6
29

filter(func,seq)  调用一个布尔函数func来遍历迭代每一个seq中的元素;返回一个是func返回值为ture的元素的序列。

print filter(lambda x: x%2,seq)
[7, 3, 1, 9, 5]

map(func,seq1[,seq2...])   将函数func作用于给定序列s的每个元素,并用以个列表来提供返回值;如果func为None,func表现为一个身份函 数,返回一个含有每个序列中元素集合的N个原始的列表。

print map(lambda x:x**2+2*x+1,seq)
print map(lambda x,y:x+y,seq,seq2)
print map(lambda x,y:(x+y,x-y),seq,seq2)
[7, 3, 1, 9, 5]
[9, 64, 16, 81, 4, 100, 25, 49, 36, 1]
[2, 11, 11, 9, 7, 14, 11, 8, 14, 3]
[(2, 2), (11, 3), (11, -5), (9, 7), (7, -5), (14, 4), (11, -3), (8, 4), (14, -4), (3, -3)]

reduce(func,seq[,init])将二元函数作用与seq序列的元素,每次携带一堆,连续地将现有的结果和下一个值作用在获得的随后的结果上,最后减少我们的序列为一个单一的返回值;如果初始值init给定,第一个比较会是init和第一个序列元素而不是序列的头两个元素。

print reduce(lambda x,y:x+y,seq,0) # cal summation i
print reduce(lambda x,y:x+y,seq)   # cal summation ii
print seq
print reduce(lambda x,y:y-x,seq)
print reduce(lambda x,y:2*x+3*y,seq,0)
45
45
[2, 7, 3, 8, 1, 9, 4, 6, 5, 0]
15
11862

def str2int(s):
    return reduce(lambda x,y:x*10+y,map(int,s))

print str2int('13877')
13877