Python map, filter, reduce 函数的注意事项
介绍
注意:本文所说的 python 都是指 python3,python2 已不再被支持 :)
map(), filter() 以及 reduce() 是 Python 中与函数式编程相关的三个函数,可以对可迭代序列做映射,过滤以及累积。熟练使用这三个函数可以提升编码速度,并且感受到函数式编程的一些思想。但是在使用过程中需要注意一些事项
TL;DR
- from functools import reduce.
- 返回对象,map, filter 返回可迭代对象,对象操作是惰性的
使用方法
map 与 filter 做为内置函数,可以直接使用,如:
1 |
|
而 reduce() 函数的使用则需要从 functools 包中导入, 如:
1 |
|
同时,reduce() 中传入的函数的参数数量为两个。
返回值
reduce 返回累积后的值,而 map 与 filter 返回的是可迭代的对象,分别为 map object 和 filter object。
1 |
|
map, filter 传入的函数,只有在返回的可迭代对象被消费时才会实际调用,即惰性求值
1 |
|
由于返回的是一个可迭代对象,因此所有的值只能迭代一次,再次尝试迭代,将会返回一个空集,如:
1 |
|
因此,在如果需要多次使用返回的迭代对象,可以通过调用 list() 方法将其转化为一个 list 对象,之后使用生成的 list 对象即可。
1 |
|
Python map, filter, reduce 函数的注意事项
https://blog.zhangliangliang.cc/post/undefined.html