Python的高阶函数,就是map、filter、reduce,说它们是高阶函数,只是因为我们平时用的少,所以理解起来也有点费劲,事实上,它们功能很强大,也很好用易用。一起来看看吧。
为了避免每次学新东西总是掉进这样那样的坑中,我们从需求入手,理解了需求,掌握了用法,那就一通百通了。
Python高阶函数需求一:对列表的每个成员做一些通用性的操作
平方函数例1:多个数字组成的一个列表,我们想要对每个数字都乘以2,虽然使用for循环也能完成,但是明显太繁琐,使用map这个高阶函数,就简单多了。代码如下:
数字列表全体乘2例2:多个字符串组成一个列表,要打印输出,一行一个,很明显,常规的方法只能是for循环遍历,然后输出的时候每个迭代变量加上\n才可以,也挺麻烦的吧,使用map这个高阶函数,就简单多了。代码如下:
所有字符串统一加上\n,一次输出需求二:对列表做一个筛选操作
筛选函数例1:对一个数字列表,筛选出其中的偶数,常规的方法是使用for循环,再在for循环中判断它,符合条件的保存到新列表中,最后再使用新列表,真的是太烦琐了,我们使用filter函数来个简单的:
筛选偶数例2:对一个数字列表,筛选出其中3的倍数,这个就更简单了,filter函数上吧:
筛选3的倍数需求三:列表的累加操作
复合函数例1:对1到进行累加,这个功能太简单了,但是使用for循环实现仍然繁琐,使用reduce函数代码就很简洁:
数据列表项进行累加,使用reduce函数例2:我们来个复杂点的,对一个数字列表中,大于60的数字求平均值,reduce函数就很简单了:
模拟求全班考试及格的学生的平均成绩通过上面6个例子,相信大家对map、filter、reduce函数已经有了基本认识,事实上JS中也有这三个函数,逻辑是一样的,可以说是一通百通,大家只需要记住:所有成员统一操作用map、筛选过滤过filter、累加这样的复杂操作用reduce,就好啦。以后遇到类似的需求,就很快能解决问题了。
Python三大高阶函数的形象表示上面这幅图来自网络,是Dzone上的一位名叫NeerajDana的大神的神作,也很形象:
map的作用,就是把三种水果分别切半filter的作用,就是在三种水果中找到橙子reduce的作用,就是将三种水果做成沙拉大神就是厉害啊!