python中的map()函数和reduce()函数的区别和用法介绍 淩亂°似流年 2022-05-11 12:40 126阅读 0赞 咱们先从定义上来解释一下这两个函数的区别: **①从参数方面来讲:** map(func, \*iterables)包含两个参数,第一个是参数是一个函数,第二个是序列(列表或元组)。其中,函数(即map的第一个参数位置的函数)可以接收一个或多个参数。 reduce(function, sequence\[, initial\]) 第一个参数是函数,第二个是 序列(列表或元组)。但是,其函数必须接收两个参数。 **②从对传进去的数值作用来讲:** map()是将传入的函数依次作用到序列的每个元素,每个元素都是独自被函数“作用”一次;(请下面会有例子说明) reduce()是将传入的函数作用在序列的第一个元素得到结果后,把这个结果继续与下一个元素作用(累积计算) ## **map**的代码解析: ## sys = map(lambda x : x+1, range(1,7) ) print(list(sys)) 打印结果: > \[2, 3, 4, 5, 6, 7\] 分析: map()中的匿名函数(`lambda x:x+1`)接收了一个参数,参数x是在可迭代对象序列(`range(1,7)`)中取值,并返回每个数据+1的结果; 如果输出语句使用 `print(sys)`,那么输出的结果是 > <map object at 0x00000219FFD2B6D8> 是一个对象,然后我们再来看一下map的源代码(如下图片): 实际上,map()是一个类,而且是拥有\_\_iter\_\_和\_\_next\_\_方法的一个类,也就是说,**map()实际上是一个 迭代器**,所以其返回结果是一个**可迭代对象**。 所以在打印的时候,需要通过**next()方法**获取其中的值,这里,使用list或者for in 遍历,结果会来得便利一些 ![在这里插入图片描述][70] ## **reduce**代码解析: ## from functools import reduce sys = reduce(lambda x, y : x+y, range(1,7)) print(sys) 打印结果: > 21 关于reduce函数的源代码: ![在这里插入图片描述][70 1] 关于源代码中的注释解释如下: > 将两个参数的函数累加应用于序列的项目, > 从左到右,以便将序列减少到单个值。 > 例如,reduce(lambda x,y:x + y,\[1,2,3,4,5\])计算 > ((((1 + 2)3)4)5)。 如果存在initial,则将其放在项目之前 > 计算中的序列,并作为默认值 > 序列是空的。 也就是说,前一次的运算结果会作为下一次运算中的某一个参数; **下面是debug调试的过程:** > 第一次 > x = \{int\} 1 > y = \{int\} 2 > 第二次 > x = \{int\} 3 > y = \{int\} 3 > 第三次 > x = \{int\} 6 > y = \{int\} 4 > 第四次 > x = \{int\} 10 > y = \{int\} 5 > 第五次 > x = \{int\} 15 > y = \{int\} 6 > sys = 21 需要注意的是,reduce函数在使用之前,需要通过`functools`导入一下才可以使用 [70]: /images/20220505/317af291edc947f69b5de96538d0b813.png [70 1]: /images/20220505/8d851dd85c21411381bd493036d77cd1.png
还没有评论,来说两句吧...