Python 高阶函数:一文搞透 map()、reduce()、filter()

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,返回函数,匿名函数,偏函数)…啊啊啊——写的很不错!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值