python高阶函数:map、filter、reduce的替代品

python高阶函数:map、filter、reduce的替代品

python高阶函数:map、filter、reduce的替代品

什么是高阶函数?


python高阶函数:map、filter、reduce的替代品

高阶函数是一种将函数作为参数,或者把函数作为结果返回的函数,map函数、sorted函数就是高阶函数的典型例子。map函数在小编以前的文章中做过相应的知识分享。sorted函数是python的内置函数,它的可选参数key用于提供一个函数,它可以将函数应用到各个元素上进行排序。

根据单词长度,使用sorted函数对一个列表进行排序。其中将len函数传给key参数,具体示例如下:

python高阶函数:map、filter、reduce的替代品

这里需要特别提示一下,任何单参数函数都能作为key参数的值。

在函数式编程中,大家最熟悉的高阶函数主要有map函数、filter函数、reduce函数和apply函数。

python3中移除了apply。如果想使用不定量的参数调用函数,可以使用fn(*args,**keywords),不用再使用apply(fn,args,keywords)。

虽然map函数、filter函数、reduce函数还能使用,但是很多场景下其都有替代品可以使用。

map、filter、reduce的替代品

python高阶函数:map、filter、reduce的替代品

函数式编程语言一般都会提供map、filter、reduce三个高阶函数。python3中前两个是内置函数,但是因为其引入了列表推导和生成器表达式,它们也就变得没有那么重要了,因为其具有了可替代性。接下来,我们一起来看一下,如何使用列表推导和生成器表达式替代map、filter函数。

1.使用列表推导替代map和filter函数

python代码:

<code>In [1]:def factorial(n):             return 1 if n < 2 else n * factorial(n-1)In [2]:fact=factorial#使用列表推导替代mapIn [3]: list(map(fact,range(6)))Out[3]: [1, 1, 2, 6, 24, 120]In [4]: [fact(n) for n in range(6)]Out[4]: [1, 1, 2, 6, 24, 120]#使用列表推导替代map和filter函数In [5]: list(map(factorial,filter(lambda n : n % 2,range(6))))Out[5]: [1, 6, 120]In [6]: [factorial(n) for n in range(6) if n % 2]Out[6]: [1, 6, 120]/<code>

通过上述结果可知,使用列表推导替代map和filter函数,结果一致的情况下,让代码更易读。易读的好处是代码的可维护性更强。

所以,在学习python高阶函数的时候,需要清楚什么是列表推导和生成器表达式,除此之外,还有字典推导等。小编在过往的文章中也分享来列表推导、生成器表达式和字典推导的相关知识及其对比,感兴趣的朋友可以查阅一下。

2.内置函数reduce方法的替代品

同样,reduce是python的内置函数,被放在python3中的functools模块中。reduce函数主要用于求和。而目前最好使用的内置求和函数是sum,其性能和可读性上有了重大提升。

python高阶函数:map、filter、reduce的替代品

sum和reduce的主要思路是把某个操作连续应用到序列到元素上,累计之前到结果,然后把一系列的值归结成为一个值。

总结

通过上述的内容可知,在高阶函数中,map、filter、reduce都有相应的替代品。因此,对其进行清楚的认识非常重要。从中也可以直到,列表推导、生成器表达式在应用方面的重要性。

python高阶函数:map、filter、reduce的替代品


分享到:


相關文章: