python3中map、filter、reduce等高階函數的替代品介紹,附示例

python3中map、filter、reduce等高階函數的替代品介紹,附示例

python3中map、filter、reduce等高階函數的替代品介紹,附示例

什麼是高階函數?


python3中map、filter、reduce等高階函數的替代品介紹,附示例

高階函數是一種將函數作為參數,或者把函數作為結果返回的函數,map函數、sorted函數就是高階函數的典型例子。map函數在小編以前的文章中做過相應的知識分享。sorted函數是python的內置函數,它的可選參數key用於提供一個函數,它可以將函數應用到各個元素上進行排序。

根據單詞長度,使用sorted函數對一個列表進行排序。其中將len函數傳給key參數,具體示例如下:

python3中map、filter、reduce等高階函數的替代品介紹,附示例

這裡需要特別提示一下,任何單參數函數都能作為key參數的值。

在函數式編程中,大家最熟悉的高階函數主要有map函數、filter函數、reduce函數和apply函數。

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

雖然map函數、filter函數、reduce函數還能使用,但是很多場景下其都有替代品可以使用。

map、filter、reduce的替代品

python3中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,其性能和可讀性上有了重大提升。

python3中map、filter、reduce等高階函數的替代品介紹,附示例

sum和reduce的主要思路是把某個操作連續應用到序列到元素上,累計之前到結果,然後把一系列的值歸結成為一個值。

總結

通過上述的內容可知,在高階函數中,map、filter、reduce都有相應的替代品。因此,對其進行清楚的認識非常重要。從中也可以直到,列表推導、生成器表達式在應用方面的重要性。

python3中map、filter、reduce等高階函數的替代品介紹,附示例


分享到:


相關文章: