【廖雪峰】函数式编程-map & reduce

map

map接收两个参数,一个函数,一个Iterable. map就是将传入的函数依次作用到序列的每个元素,然后返回一个Iterator。请记住,不用管后面传进去的是什么东西,只要是个Iterablemap就能返回处理后的IteratorIterator是一个惰性序列,用到的时候才计算。

def str2num(s):
    DIGITS = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
    return DIGITS[s]

l1 = list(map(str2num,['1','2','3','4','5']))
l2 = list(map(str2num,'12345'))
l3 = list(map(str2num,('1','2','3','4','5')))
print(l1)
print(l2)
print(l3)

请注意,单个元素是什么东西,处理的就是什么东西。

reduce

reduce的两个参数,一个接收两个参数的函数,一个是Iterablereduce函数首次取Iterable的前两个元素进行处理,返回一个结果。之后是将此结果和Iterable剩余元素的首元素同时传入函数进行处理。reduce返回一个具体的结果。与map类似,reduce也不关心你传进去的是什么东西,给他什么东西,他就按什么东西进行运算。

from functools import reduce
def h(x,y):
    return 10*x + y

r1 = reduce(h,'12')
r2 = reduce(h,(1,2,3))
r3 = reduce(h,[1,2,3])
print(r1,r2,r3)

字符串转化为整数:

from functools import reduce
def h(x,y):
    return 10*x + y
#map将字符串转换成数字序列  reduce把数字序列给转化成数
def str2num(s):
    DIGITS = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
    return DIGITS[s]
r1 = reduce(h,map(str2num,'12345'))
r2 = reduce(h,list(map(str2num,'12345')))
r3 = reduce(h,tuple(map(str2num,'12345')))
print(r1,r2,r3)

#这再一次验证了,reduce和map的第二个参数只要是一个Iterable就OK了。

猜你喜欢

转载自blog.csdn.net/weixin_41687289/article/details/81866536
今日推荐