Python高階函數使用總結!

2021-03-02 Datawhale
審稿人:耿遠昊,Datawhale成員,華東師範大學,開源教程《Joyful-Pandas》核心貢獻者。

本文結合各種實際的例子詳細講解了Python5個內建高階函數的使用,能夠幫助理解Python的數據結構和提高數據處理的效率,這5個函數分別是:

一、map1.1 語法

map函數的基本語法是map(func, seq),其含義指的是:對後面可迭代序列中的每個元素執行前面的函數func的功能,最終獲取到一個新的序列。注意:

Python3 中返回的是一個可迭代器,如果想返回列表,可以使用list()進行處理
help(map)  # 查看幫助信息

1.2 demo

通過舉例說明map函數的使用方法

使用匿名函數的時候可以有多個參數

二、reduce2.1 語法

reduce函數的定義:

reduce(function, sequence [, initial] ) -> value

reduce依次從sequence中取一個元素,和上一次調用function的結果做參數,再次調用function。

第一次調用function時,如果提供initial參數,會以sequence中的第一個元素和initial作為參數調用function,否則會以序列sequence的第一個數

」2.2 使用

Python3中已將reduce函數移到functools模塊中,需要先進行導入:

from functools import reduce   # 導入

help(reduce)  # 查看幫助文檔

上面的例子我們通過一個圖形來解釋說明:

2.3 demoimage-20201024185550970

具體過程為:

1. 1*2+1=3
2. 3*3+1=10 # 第一個3為上面的結果3,第2個原始數據中的3
3. 10*4+1=41

初始化值和序列中的第一個值執行func函數,將得到的結果作為下次的起始值

# 具體過程解釋為

1. 6+1=7
2. 7+2=9
3. 9+3=12
4. 12+4=16
5. 16+5=21

三、filter3.1 語法

filter()函數用於過濾序列,過濾掉不符合條件的那些元素,返回符合條件的元素組成新列表。

序列中的每個元素作為參數傳遞給函數進行判斷,返回True或者False,最後將返回True的元素放到新列表中。

filter()語法如下:

filter(function, iterable)  # 前者為函數,後者為待執行的序列

3.2 demo
help(filter)  # 幫助文檔

返回10以內的偶數

選擇符合指定要求的字符串

四、sorted4.1 語法
sorted(iterable, key=None, reverse=False)

4.2 3個參數

sorted()接受3個參數,返回的是一個排序後的列表

reverse=False,接受一個布爾值,選擇是否反轉排序結果,默認是False

接受一個回調函數key=None,回調函數只能有一個參數,根據函數的返回值進行排序

4.3 demo
help(sorted)  # 幫助文檔

4.4 結果反轉

結果反轉的意義就是將結果降序排列,因為原本默認是升序的,使用的是reverse=True

4.5 理解key

key參數的作用是我們自定義一個函數,然後通過將序列中的元素作用於函數之後再進行排序

在這裡我們使用絕對值函數

4.6 對比sort()

sort()方法只能對原列表list進行排序,參數和sorted是相同的

結果是將原來的列表直接原地修改,而sorted 是生成新的列表,二者是不同的

五、zip

zip()是Python中一個非常重要的方法,能夠快速的實現很多功能。

5.1 語法
zip([iterable,...])  # iterable是一個或者多個可迭代器

函數執行的結果在Python3中返回的是一個zip對象,如果需要展示成列表的形式,直接使用list方法展開;展開的結果是列表中嵌套元組的形式
help(zip)  # 查看文檔

5.2 zip接受一個序列

zip中可以接受列表、元組、字符串等形式

zip接受空列表的形式,返回的仍空列表

5.3 zip接受多個序列

同時對不同類型的序列進行合併

5.4 處理長度不同

當多個序列同時存在,取長度最小的那個序列的長度

5.5 zip(*iterables)

我們一般認為該方法是zip的反過程,是一個unzip的過程,舉例說明其使用:

5.6 複雜例子

下面看一個更為複雜的例子

這個例子的解釋為:

[x]*3結果為[x,x,x],實際上也是[[4,5,6],[4,5,6],[4,5,6]][*[x]*3]的結果則為[(4,4,4),(5,5,5),(6,6,6)]5.7 zip運用

下面通過zip的實際例子來說明它的應用:

for循環實現:

使用zip實現:

相關焦點

  • python高階函數:map、filter、reduce的替代品
    什麼是高階函數?高階函數是一種將函數作為參數,或者把函數作為結果返回的函數,map函數、sorted函數就是高階函數的典型例子。map函數在小編以前的文章中做過相應的知識分享。sorted函數是python的內置函數,它的可選參數key用於提供一個函數,它可以將函數應用到各個元素上進行排序。
  • 【Python基礎】Python 函數使用總結
    :默認值是聲明在函數定義時,關鍵字參數是在函數調用時使用的此結構。4 可變參數Java和C++在解決同一個函數但參數個數不同時,會使用函數重載的方法。Python使用可變參數的方法,非常靈活。9 高階函數可以用來接收另一個函數作為參數的函數叫做高階函數。
  • Python 函數3000字使用總結
    :默認值是聲明在函數定義時,關鍵字參數是在函數調用時使用的此結構。4 可變參數Java和C++在解決同一個函數但參數個數不同時,會使用函數重載的方法。Python使用可變參數的方法,非常靈活。9 高階函數可以用來接收另一個函數作為參數的函數叫做高階函數。
  • python之lambda函數使用
    二,lambda簡單使用def detail(x,y): return x*ys = lambda x,y:x*yprint(s(3,3))以上對比我們可以看出如果我們想計算兩個數的乘積,需要定義一個函數,傳入兩個形參,然而lambda也是直接傳入兩個形參。後面使用冒號,寫入表達式,即可得到我們所需要的結果。
  • 一文看懂Python列表表達式及高階函數如lamda, zip, enumerate, map和filter方法.
    深入了解和熟練使用python的列表表達式和內置的一些高階函數如lamda, zip, enumerate, map, filter, reduce
  • Python入門基礎之map()、reduce()函數使用
    本文環境都是基於python3.X的,畢竟要學會擁抱未來,擁抱新的知識。Python3 現在已經發展的差不多了。1、 map()函數map()是 python 內置的高階函數,它接收一個函數 f 和一個 list,並通過把函數 f 依次作用在 list 的每個元素上,得到一個新的object並返回。
  • 在Python中使用Reduce函數
    使用for循環介紹reduce()函數的最好的方式是從實際問題入手,並嘗試用老式的方法解決它,即使用for循環。然後我們可以使用reduce函數嘗試解決相同的問題。假設我們有一個數字列表,我們希望將列表中的所有數字相乘,然後返回乘積。
  • python學習與PHP對比總結(二)之函數
    python的內置函數python提供了一些內置函數,可以直接調用即可,這些內置函數的用法和PHP的類似,直接調用傳入參數即可,舉幾個例子:abs取絕對值的函數:>>> abs(10)
  • python中str內置函數用法總結
    大家在使用python的過程中,應該在敲代碼的時候經常遇到str內置函數,為了防止大家搞混,本文整理歸納了str內置函數。
  • 科學使用python中的Map函數和Filter函數
    我們使用for循環遍歷num_list,並將num_list每個元素的平方附加到num_list_squared列表中。完成此操作的另一種方法是使用內置的 python 函數 map。Map 函數接受兩個參數: 我們要應用的函數和我們要應用它的迭代對象或序列(例如本例中的列表)。換句話說,map 函數映射或應用這個函數到我們傳入的序列的每個元素。
  • python高階函數學習, map、reduce
    一個函數可以接收另一個函數作為參數,這樣的函數叫做高階函數。
  • 寫Python 代碼不可不知的函數式編程技術
    把函數作為參數和返回值函數還可以作為其他函數的參數和返回值。接受函數作為輸入或返回函數的函數叫做高階函數,它是函數式編程的重要組成部分。高階函數具備強大的能力。這就是高階函數存在的意義。,因此該函數必須返回 bool 值,且該函數必須是一元函數(即只使用一個輸入參數)。
  • 為什麼要使用函數
    函數是什麼函數,即實現一個特定功能的代碼段。是python中的重要技能(工具)。函數離我們並不遠,早期我們已熟練使用了一些內置函數:例如input print等;根據使用範圍可以將函數分為兩類:主函數我們會使用這樣來表示,它和代碼一樣,全局都是使用;01 if _name_ = '_main_':02     print('This is main.')
  • [翻譯]淺談JavaScript中的高階函數
    讓我們看看使用和不使用高階函數的解決方案。不使用高階函數使用高階函數我們能用箭頭函數來讓代碼更簡短一點:例2#不使用高階函數使用高階函數2.不使用高階函數使用高階函數3. Array.prototype.reducereduce方法對數組的每個成員執行回調函數,然後產生單個輸出值。
  • python參數類型使用總結
    今日分享python參數類型盤點Python強大多變,原因之一在於函數參數類型的多樣化。方便的同時,也為使用者帶來更多的約束規則。(5) TypeError: f() got an unexpected keyword argument 'a'(6) TypeError: f() takes 0 positional arguments but 1 was given總結主要的參數類型使用規則
  • React 中高階函數與高階組件(上)
    ,做個記錄總結一下的函數可以被作為參數傳遞如下:經常用到的setTimeout,setIntervalsetTimeout2 秒執行一次箭頭函數說明類似這樣的高階函數:clearInterval 清除定時器等,將函數作為形參數放到一個函數中執行的,這個函數可以視為高階函數數組中的一些迭代器函數都可以視為高階函數:map,filter,forEach
  • 寫 Python 代碼不可不知的函數式編程技術
    接受函數作為輸入或返回函數的函數叫做高階函數,它是函數式編程的重要組成部分。高階函數具備強大的能力。就像《Eloquent JavaScript》中解釋的那樣:「高階函數允許我們對動作執行抽象,而不只是抽象數值。」我們來看一個例子。假設我們想對一個項目列表(list of items)執行迭代,並將其順序列印出來。
  • Python 常用函數總結
    1.常用內置函數:(不用import就可以直接使用)   help(obj) 在線幫助, obj可是任何類型   callable
  • python內置函數format的使用方法
    前言其實在Java中,我們已經解除過format的使用,例如:當我們要把昨天的訂單金額統計後顯示到前臺時,由於資料庫存儲的是double格式的數據,在統計完昨天的訂單金額後仍然是double類型的數據,但是,之前遇到過此類問題的小夥伴都知道,這個訂單額有時候會喪失精度,變成一個很長的
  • Python每天一分鐘:類定義進階/炫技—使用type函數動態創建類
    然而,type函數的強大功能並非只能用於查看變量類型,在Python中完全允許使用 type()函數來動態創建類,或者說定義類,這也是python類編程中的進階用法!python類定義進階下面我們將詳細介紹使用type()函數動態創建類的過程!