最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 函數編編程的三大法寶map+filter+reduce分享

 更新時間:2022年03月22日 14:28:16   作者:宇宙之一粟  
這篇文章主要介紹了Python 函數編編程的三大法寶map,filter,reduce的分享,python利用 map 在一個可迭代對象的各項上調用函數的工具;利用 filter 來過濾項;利用 reduce 把函數作用在成對的項上來運行結果的工具,下面我們就來對這三者進行詳細的介紹,需要的朋友可以參考下

眾所周知,Python 支持多種編程范式:過程式(使用基礎的語句)、面向對象編程和函數式編程。

Python 也提供了其他函數式編程語言的工具:

  • 利用 map 在一個可迭代對象的各項上調用函數的工具
  • 利用 filter 來過濾項
  • 利用 reduce 把函數作用在成對的項上來運行結果的工具

一、map

在沒有循環(huán)的情況下處理可迭代對象:map

有時我們需要對列表、集合、字典等可迭代序列做的一個操作就是:對其中每一個元素值進行某種操作,把其結果收集起來。

比如選出數據庫中的某一列進行加減操作,或者針對某些特殊的值做平方的處理。

我們先來看一個例子:

>>> test = [1, 2, 3, 4, 5, 6]
>>> square = []
>>> for x in test:
? ? square.append(x*x)

? ??
>>> square
[1, 4, 9, 16, 25, 36]
>>>

此時就可以利用 Pythonmap,允許您在不使用循環(huán)的顯式中處理和轉換所有項目,該技術通常稱為映射。當您需要將轉換函數應用于可迭代并將其轉換為新的迭代時,map 就能夠有其用武之地。

>>> test = [1, 2, 3, 4, 5, 6]
>>>?
>>> def square(num):
? ? return num*num

>>> list(map(square, test))
[1, 4, 9, 16, 25, 36]
>>>

如上,我們會傳入一個自定義的函數 ??square()??  來更加一般化地使用它,也就是對列表中的每一個元素都應用這個函數。

map 對列表中的每一個元素都調用了 square 函數,并將返回值收集到一個新的列表中。

正因為我們需要自定義一個 square 函數,結合上一篇文章 ? ?lambda 函數??的簡單介紹中。我們可以利用 lambda 直接生成這個匿名函數,也就是可以寫出這樣的代碼實現相同的功能:

>>> list(map((lambda x: x*x), test))
[1, 4, 9, 16, 25, 36]
>>>

map 傳入內置 Python 函數

除了自定義函數,還可以 map 中傳入內置的 Python 函數。例如,如果您有一個字符串列表,您可以輕松地創(chuàng)建一個計算該字符串列表長度的新列表:

>>> name = ["Sam", "Dwen", "Kyrie"]
>>> list(map(len, name))
[3, 4, 5]
>>>

map 高級用法

map 不單能實現 for 循環(huán)能實現的同樣的方式,還有性能優(yōu)勢。map 的高級用法比如:在一個可序列類型中,map 會按照順序,并行地從各個序列中逐項取出一組又一組參數,然后傳入函數中:

>>> pow(2, 8)
256
>>> pow(3,8)
6561
>>> list(map(pow, [1,2,3], [8, 8, 8]))
[1, 256, 6561]
>>>

能看到上述代碼的結果,map 對傳入的每個序列并行各自取一個值。

二、map 與列表推導式

map 調用其實與列表推導式相似。

>>> test = [1, 2, 3, 4, 5, 6]
>>> [x*x for x in test]
[1, 4, 9, 16, 25, 36]
>>> list(map((lambda x: x*x), test))
[1, 4, 9, 16, 25, 36]

但是 map 在一般情況下會比列表推導式運行更快,而且編寫的代碼也會更少。而且有一點很重要:通過使用圓括號而不是方括號來包圍一個推導,能創(chuàng)建一個按需產生值的對象,減少了內存又減少了程序的響應時間。

三、選擇可迭代對象中的元素:filter

map 函數是將 Python 函數式編程工具集中一個主要也相對明確的代表。而 filter 和 reduce 分別實現了基于一個測試函數選擇可迭代對象的元素,以及向”元素對“ 應用函數的功能。

下面來看一個調用 filter 挑出一個序列中大于零的元素:

>>> list(range(-10, 10))
[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(filter((lambda x : x > 0), range(-10, 10)))
[1, 2, 3, 4, 5, 6, 7, 8, 9]

filter 對于序列或可迭代對象中的元素,如果函數對該元素返回了 True 值,這個元素就會被加入到結果列表中。

與 map 一樣,filter 也能用一個 for 循環(huán)來等效,但是 filter 是內置的、簡明的,通常也運行得更快:

>>> result = []
>>> for x in range(-10, 10):
? ? if x > 0:
? ? ? ? result.append(x)

? ? ? ??
>>> resullt
[1, 2, 3, 4, 5, 6, 7, 8, 9]

同樣的功能,我們也能用列表推導式來實現:

>>> [x for x in range(-10,10) if x > 0]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

四、合并可迭代對象中的元素: reduce

Python的 reduce()是一種函數,它在 Python 標準庫中居住在一個名為 ??functools??  的模塊中:

from functools import reduce

通過 reduce 來計算一個列表中所有元素加起來的和:

>>> reduce((lambda x, y: x + y),[1,2,3,4,5])
15

reduce 會將當前的和列表中的下一個元素傳入列出的 lambda 函數,在默認條件下,序列中的第一個元素初始化了起始值。

使用 reduce 的這種用法也與如下使用 for 循環(huán)實現了同樣的功能:

>>> test = [1, 2, 3, 4, 5]
>>> result = test[0]
>>> for x in test[1:]:
? ? result ?= result + x
? ??
>>> result
15

五、總結

  • map 包括將轉換函數應用于可迭代對象以生成新的可迭代對象。新迭代中的項是通過對原始迭代中的每個項調用轉換函數來生成的。
  • filter 包括將謂詞或布爾值函數應用于迭代以生成新的可迭代。通過篩選原始可迭代中的任何項目,以使謂詞函數返回 false 的任何項目生成的項目。
  • reduce 包括將 reduce 函數應用于迭代以產生單個累積值。

到此這篇關于Python 函數編編程的三大法寶map+filter+reduce分享的文章就介紹到這了,更多相關Python 法寶map+filter+reduce內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python程序運行原理圖文解析

    Python程序運行原理圖文解析

    這篇文章主要介紹了Python程序運行原理圖文解析,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • python實戰(zhàn)練習做一個隨機點名的程序

    python實戰(zhàn)練習做一個隨機點名的程序

    讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Python實現一個隨機點名的程序,大家可以在過程中查缺補漏,提升水平
    2021-10-10
  • python怎么創(chuàng)建新文件代碼舉例

    python怎么創(chuàng)建新文件代碼舉例

    Python創(chuàng)建新文件有多種方法,包括使用open函數、with語句和Pathlib模塊,這篇文章主要給大家介紹了關于python怎么創(chuàng)建新文件的相關資料,需要的朋友可以參考下
    2023-12-12
  • pytorch中的inference使用實例

    pytorch中的inference使用實例

    今天小編就為大家分享一篇pytorch中的inference使用實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python 模塊EasyGui詳細介紹

    Python 模塊EasyGui詳細介紹

    這篇文章主要介紹了Python 模塊EasyGui詳細介紹的相關資料,需要的朋友可以參考下
    2017-02-02
  • python十進制轉二進制的詳解

    python十進制轉二進制的詳解

    在本篇文章里小編給大家整理了關于python十進制轉二進制的相關知識點內容,需要的朋友們可以參考學習下。
    2020-02-02
  • python 實現全球IP歸屬地查詢工具

    python 實現全球IP歸屬地查詢工具

    這篇文章主要介紹了python 實現全球IP歸屬地查詢工具的示例代碼,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • 解決pycharm 誤刪掉項目文件的處理方法

    解決pycharm 誤刪掉項目文件的處理方法

    今天小編就為大家分享一篇解決pycharm 誤刪掉項目文件的處理方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python正則表達式介紹

    Python正則表達式介紹

    本文介紹了Python對于正則表達式的支持,包括正則表達式基礎以及Python正則表達式標準庫的完整介紹及使用示例。本文的內容不包括如何編寫高效的正則表達式、如何優(yōu)化正則表達式,這些主題請查看其他教程
    2012-08-08
  • Python基礎教程之if判斷,while循環(huán),循環(huán)嵌套

    Python基礎教程之if判斷,while循環(huán),循環(huán)嵌套

    這篇文章主要介紹了Python基礎教程之if判斷,while循環(huán),循環(huán)嵌套 的相關知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04

最新評論

阿拉尔市| 驻马店市| 溆浦县| 普陀区| 行唐县| 蒙自县| 武山县| 铜鼓县| 丹东市| 临安市| 凤山市| 泰和县| 达拉特旗| 日土县| 鄄城县| 汝城县| 东丽区| 阳新县| 甘肃省| 崇礼县| 房山区| 昌图县| 吴江市| 临沂市| 泊头市| 陇南市| 大余县| 江西省| 石台县| 敦化市| 出国| 白山市| 花莲县| 乌鲁木齐市| 深水埗区| 都兰县| 江达县| 安丘市| 壶关县| 潮安县| 革吉县|