0. 写在前面
首先 要知道map()、reduce()、filter()属于高阶函数;
其次要知道它们属于函数式编程的范式;
最后来看一下它们具体的概念和用法。
若前两点有不明白的,可以看之前的文章:Python从基础到进阶——「函数&函数式编程」
下面开始直接上干货。
1. map
概念和代码
# map(function, iterable) -> iterator
# map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
def map_fc(func, iter):
'''
这个函数只是为了下面的几行备注
:param func: 函数(function),匿名函数在这里发挥了它的作用
:param iter: 可迭代对象(iterable),所以不仅仅是列表
:return: iterator(惰性序列),所以需用list转换为list类型
'''
return map(func, iter)
func = lambda x:x**2 - 1
iter = [1, 2] # 第二个参数是iterable,因此使用 range(1, 3)也是一样的
map_result = map_fc(func, iter)
print(map_result)
print(list(map_result))
结果:
<map object at 0x10e571208>
[0, 3]
注意事项:Python3 以后,返回值是iterator(惰性序列),所以需用list()将结果转换为list类型
本质理解
map(function, iterable) -> iterator

将函数作用于可迭代对象中的每一个元素。
2. reduce
概念和代码
# reduce(function, iterable) -> value
# reduce把一个函数作用在一个可迭代对象,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
from functools import reduce # 注意:reduce() 从python 3 开始移到了 functools 模块
def reduce_fc(func, iter):
'''
这个函数只是为了下面的几行备注
:param fuc: 函数(function)
:param iter: 可迭代对象(iterable)
:return: value
'''
return reduce(func, iter)
func = lambda x, y:x+y
iter = [1, 1, 2, 2]
reduce_result = reduce_fc(func, iter)
print(reduce_result)
结果:
6
注意事项:返回值直接是value
本质理解
reduce(function, iterable) -> value

就是对一个序列的每个项迭代调用函数。首次执行如果没有指定则默认取第一个元素作为startValue,而第2个元素作为第二个参数,然后执行后的结果则作为下一次执行的第1个元素,以此类推
3. filter
概念和代码
# filter(function, iterable) -> iterator
# filter 将可迭代对象中的每一个元素,传递给函数进行判断,最后返回结果为True的元素组成的一个iterator
def filter_fc(func, iter):
'''
这个函数只是为了下面的几行备注
:param func: 函数(function)
:param iter: 可迭代对象(iterable)
:return: iterator(惰性序列)
'''
return filter(func, iter)
func = lambda x: isinstance(x, str)
iter = [1, 'Robin', (2, 4)]
filter_result = filter_fc(func, iter)
print(filter_result)
print(list(filter_result))
结果:
<filter object at 0x10e5b0390>
['Robin']
注意事项:Python3 以后,返回值是iterator(惰性序列),所以需用list()将结果转换为list类型
本质理解
filter(function, iterable) -> iterator

返回经过函数判断结果为True的那些元素组成的iterator(删除了结果为False的那些元素)
4. 后续思考:why?
其实用一个循环也可以做的事情,为什么还要重新定义一个专门的函数?
——函数式编思维
更多参考:Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)…啊啊啊——写的很不错!
581

被折叠的 条评论
为什么被折叠?



