python高階函數:map、filter、reduce的替代品

2020-12-08 素食先生lpt

什麼是高階函數?

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

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

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

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

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

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

map、filter、reduce的替代品

函數式程式語言一般都會提供map、filter、reduce三個高階函數。python3中前兩個是內置函數,但是因為其引入了列表推導和生成器表達式,它們也就變得沒有那麼重要了,因為其具有了可替代性。接下來,我們一起來看一下,如何使用列表推導和生成器表達式替代map、filter函數。

1.使用列表推導替代map和filter函數

python代碼:

In [1]:def factorial(n):

return 1 if n < 2 else n * factorial(n-1)

In [2]:fact=factorial

#使用列表推導替代map

In [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]

通過上述結果可知,使用列表推導替代map和filter函數,結果一致的情況下,讓代碼更易讀。易讀的好處是代碼的可維護性更強。

所以,在學習python高階函數的時候,需要清楚什麼是列表推導和生成器表達式,除此之外,還有字典推導等。小編在過往的文章中也分享來列表推導、生成器表達式和字典推導的相關知識及其對比,感興趣的朋友可以查閱一下。

2.內置函數reduce方法的替代品

同樣,reduce是python的內置函數,被放在python3中的functools模塊中。reduce函數主要用於求和。而目前最好使用的內置求和函數是sum,其性能和可讀性上有了重大提升。

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

總結

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

相關焦點

  • Python lambda與filter、map、reduce的使用實例
    Python 的高階函數filter、map、reduce 都可以把已有序列的元素作為函數的參數調用。這裡的函數也可以是lambda 函數。關於lambda 的語法可以看我之前寫的Python 自定義函數Python filter 函數用於過濾序列語法:filter(function函數, iterable)說明:把序列元素作為參數進行函數調用,函數的返回值為true 的元素組成新的序列function函數可以為lambda函數Python map 函數以一個或者多個序列的元素作為參數進行函數調用語法:map
  • 高階函數不會用?教你python最實用的三個高階函數
    我相信很多讀者點開後依然一臉懵,什麼是高階函數,高在那裡了?大貓先給大家講講什麼是高階函數,只要滿足以下兩點定義的函數,都可以稱為高階函數。最常見的高階函數就是閉包函數,修飾器是閉包的一種語法糖實現,python中修飾器是大量才用的技術方案之一,可見高階函數的重要性。修飾器是輸出一個函數作為返回值的高階函數,我們今天主要講接受一個或多個參數作為輸入的高階函數,主要有map、reduce和filter函數。
  • Python編程技巧:如何用Map, Filter, Reduce代替For循環?
    map、filter 和 reduce 這三種技術可以提供描述迭代原因的函數替代方案,以便避免過多的 for 循環。我之前在 JavaScript 中寫過這些技術的入門文章,但是它們在 Python 中的實現略有不同。我們將簡要介紹這三種技術,主要介紹它們在 JavaScript 和 Python 中的語法差異,然後給出如何轉換 for 循環的示例。
  • Python入門基礎之map()、reduce()函數使用
    本文環境都是基於python3.X的,畢竟要學會擁抱未來,擁抱新的知識。Python3 現在已經發展的差不多了。1、 map()函數map()是 python 內置的高階函數,它接收一個函數 f 和一個 list,並通過把函數 f 依次作用在 list 的每個元素上,得到一個新的object並返回。(python2返回列表,Python3返回迭代對象)map()的使用方法形如map(f(x),Itera),它有兩個參數,第一個參數為某個函數,第二個為可迭代對象。
  • 如何用Map、Filter和Reduce替換Python For循環?
    此時,Map, filter和 reduce三種技術可以幫到你。它們可以通過提供描述迭代原因的函數替代選擇,來矯正For循環的狂熱。因此當使用map(), filter()或 reduce()時,如果需要對每個項執行多個操作,需要先定義函數,再把函數使用進去。
  • 零基礎小白python入門必看之高階函數(1)
    python高階函數詳解本文結合各種實際的例子詳細講解了Python5個內建高階函數的使用,能夠幫助理解Python的數據結構和提高數據處理的效率,這5個函數分別是:mapreducefiltersorted/sortzip
  • 第九篇:Python中lambda、filter和map函數
    大綱函數類型定義及特性lambda函數定義及使用filter函數定義及使用map函數定義及使用引入函數類型概念函數類型定義:python中任意一個函數都有數據類型,這種數據類型是function(函數類型)函數類型特性:函數類型的數據與其他類型的數據一樣,可以作為函數的參數或者返回值來使用。
  • 從頭使用.map() .filter() 和.reduce(),你會有意想不到的收穫!
    在「碼農圈」,學習如何使用.map()、.filter()和.reduce()函數,我們讀到、看到和聽到的一切都很複雜,無法理解這些概念,因為它們是獨立的學習單元。聽說這些是意味著上升至啟蒙狀態的入門知識。真希望自己聽到的是實話:早點明白這三種方法其實都是識別和實現過程,循環遍歷迭代的原因通常屬於三個功能類別之一。
  • Python零基礎入門教程,如何使用lambda、filter和map函數?
    大綱函數類型定義及特性lambda函數定義及使用filter函數定義及使用map函數定義及使用引入函數類型概念函數類型定義:python中任意一個函數都有數據類型,這種數據類型是function(函數類型)
  • Python基礎教程——高階函數
    Python的高階函數,就是map、filter、reduce,說它們是高階函數,只是因為我們平時用的少,所以理解起來也有點費勁,事實上,它們功能很強大,也很好用易用。一起來看看吧。平方函數例1:多個數字組成的一個列表,我們想要對每個數字都乘以2,雖然使用for循環也能完成,但是明顯太繁瑣,使用map這個高階函數,就簡單多了。代碼如下:
  • [翻譯]淺談JavaScript中的高階函數
    簡單來說,高階函數是一個函數,它接收函數作為參數或將函數作為輸出返回。例如,Array.prototype.map,Array.prototype.filter和Array.prototype.reduce是語言中內置的一些高階函數。高階函數實戰讓我們來看一些語言中內置的高階函數,然後跟不使用高階函數的解決方案對比一下。1.
  • python進階教程之內建函數
    內建函數Build-in Function,啟動python解釋器,輸入dir(__builtins__), 可以看到很多python解釋器啟動後默認加載的屬性和函數,這些函數稱之為內建函數, 這些函數因為在編程時使用較多,cpython解釋器用c語言實現了這些函數,啟動解釋器 時默認加載。
  • 機器學習基礎之Python函數
    def 函數名():函數內容 函數內容 <return 返回值>def my_abs(x): if x >= 0: return x else: return -x my_abs(-9)//輸出9可以沒有returndef filter_fruit
  • 從零開始學Python-Day26-映射與規約map/reduce
    Python內建了map()和reduce()函數。map-映射map函數接收兩個參數,一個是函數,一個是可迭代對象Iterable,map把Iterable中的對象,依次作為參數給到函數,並返回結果生成新的Iterable。
  • 「python」高階函數map、reduce的介紹
    map函數至少使用2個參數:(函數,可迭代對象),返回的結果是個迭代器。實現的作用是將前面的函數依次在後面的可迭代對象上執行。>>> def ljds(x):... return x+x...
  • 巧用Python高階函數,秒提代碼逼格
    Python以簡單易學,語法簡潔易懂,編碼優美規範的特點,受到很多程式設計師和普通人的喜愛,相信和我一樣,有很多人在學過Python之後就對其愛不釋手了吧,今天給大家分享幾個常用的高階函數,瞬間提升代碼逼格,成為一個有深度、有內涵的Python程式設計師!
  • 十九、深入python匿名函數
    其他函數lambda返回的值,結合map,filter,reduce使用。下面實例中的map、reduce、filter都是Python內置的高階函數,mapmap 函數的形式(&;15)注意:無論是map還是filter返回的都是對象,需要對其進行列錶轉化。
  • python教程:3個非常有用的內置函數
    這三個內置函數還是非常有用的,在工作中用的還不少,順手,下面一一進行介紹 1、filter 語法:filter
  • 寫Python 代碼不可不知的函數式編程技術
    把函數作為參數和返回值函數還可以作為其他函數的參數和返回值。接受函數作為輸入或返回函數的函數叫做高階函數,它是函數式編程的重要組成部分。高階函數具備強大的能力。這就是高階函數存在的意義。函數返回的 map 對象可被類型轉換為 list,以方便使用。
  • 「課堂筆記」財碼Python基礎課:可重複使用的財務算法|函數精進
    上一課中,我們講了函數的標準寫法,在本課中,我們繼續講解函數的各種變形。匿名函數Python中可使用匿名函數的情況:1.程序一次性使用、不需要定義函數名時,用匿名函數可以節省內存中變量定義空間。Python使用lambda關鍵字創建匿名函數:lambda [參數,參數]: <表達式>高階函數Python內置了一些特殊函數,可以讓代碼更加簡潔,它們內部可以調用其他函數作為參數,所以稱之為高階函數。