927|偏函式
Python的functools模組提供了很多有用的功能,其中一個就是偏函式(Partial function)。要注意,這裡的偏函式和數學意義上的偏函式不一樣。
在介紹函式引數的時候,我們講到,通過設定引數的預設值,可以降低函式呼叫的難度。而偏函式也可以做到這一點。舉例如下:
int()函式可以把字串轉換為整數,當僅傳入字串時,int()函式預設按十進位制轉換:
>>> int('12345')
12345
但int()函式還提供額外的base引數,預設值為10。如果傳入base引數,就可以做N進位制的轉換:
>>> int('12345', base=8)
5349
>>> int('12345', 16)
74565
偏函式
閱讀: 9462
Python的functools模組提供了很多有用的功能,其中一個就是偏函式(Partial function)。要注意,這裡的偏函式和數學意義上的偏函式不一樣。
在介紹函式引數的時候,我們講到,通過設定引數的預設值,可以降低函式呼叫的難度。而偏函式也可以做到這一點。舉例如下:
int()函式可以把字串轉換為整數,當僅傳入字串時,int()函式預設按十進位制轉換:
int('12345')
12345
但int()函式還提供額外的base引數,預設值為10。如果傳入base引數,就可以做N進位制的轉換:
int('12345', base=8)
5349
int('12345', 16)
74565
假設要轉換大量的二進位制字串,每次都傳入int(x, base=2)非常麻煩,於是,我們想到,可以定義一個int2()的函式,預設把base=2傳進去:
def int2(x, base=2):
return int(x, base)
這樣,我們轉換二進位制就非常方便了:
>>> int2('1000000')
64
>>> int2('1010101')
85
functools.partial就是幫助我們建立一個偏函式的,不需要我們自己定義int2(),可以直接使用下面的程式碼建立一個新的函式int2:
>>> import functools
>>> int2 = functools.partial(int, base=2)
>>> int2('1000000')
64
>>> int2('1010101')
85
所以,簡單總結functools.partial的作用就是,把一個函式的某些引數給固定住(也就是設定預設值),返回一個新的函式,呼叫這個新函式會更簡單。
注意到上面的新的int2函式,僅僅是把base引數重新設定預設值為2,但也可以在函式呼叫時傳入其他值:
>>> int2('1000000', base=10)
1000000
最後,建立偏函式時,實際上可以接收函式物件、args和*kw這3個引數,當傳入:
int2 = functools.partial(int, base=2)
實際上固定了int()函式的關鍵字引數base,也就是:
int2('10010')
相當於:
kw = { 'base': 2 }
int('10010', **kw)
當傳入:
max2 = functools.partial(max, 10)
實際上會把10作為*args的一部分自動加到左邊,也就是:
max2(5, 6, 7)
相當於:
args = (10, 5, 6, 7)
max(*args)
結果為10。
小結
當函式的引數個數太多,需要簡化時,使用functools.partial可以建立一個新的函式,這個新函式可以固定住原函式的部分引數,從而在呼叫時更簡單。
相關文章
- JavaScript 偏函式JavaScript函式
- Scala偏函式函式
- 函式柯里化和偏函式應用函式
- python的偏函式(partial)Python函式
- JavaScript 專題之偏函式JavaScript函式
- 測開之函式進階· 第5篇《偏函式》函式
- Python利用partial偏函式生成不同的聚合函式Python函式
- python函式程式設計 返回函式 匿名函式 裝飾器 偏函式Python函式程式設計
- Python 偏函式用法全方位解析Python函式
- python進階(17)偏函式partialPython函式
- python 中偏函式 partial 的使用Python函式
- Python函數語言程式設計-高階函式、匿名函式、裝飾器、偏函式Python函數程式設計函式
- Python 偏函式介紹及應用Python函式
- JS中的 偏函式 和 柯里化JS函式
- Python基礎之特殊的函式--裝飾器和偏函式Python函式
- 打造屬於自己的underscore系列(五)- 偏函式和函式柯里化函式
- Python3學習(18)--偏函式(Partial)Python函式
- scala簡明教程:偏函式、高階函式、Future非同步程式設計、隱式轉換函式非同步程式設計
- 大資料Scala系列之樣例類_Option_偏函式大資料函式
- Python偏函式應用舉例-路燈指示牌Python函式
- 別讓你的偏愛拖了後腿:快擁抱箭頭函式吧!函式
- 含兩個引數的三元函式的高階偏導數函式
- flask路由系統、偏函式、CBV、模板、請求響應、session、請求擴充套件Flask路由函式Session套件
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- 好程式設計師大資料教程分享Scala系列之Option_偏函式_String程式設計師大資料函式
- Oracle 函式大全(字串函式,數學函式,日期函式,邏輯運算函式,其他函式)Oracle函式字串
- 【函式式 Swift】函式式思想函式Swift
- 前端面試每日 3+1 —— 第927天前端面試
- 逆向思維_cf927_C. LR-remaindersREMAI
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- 【函式】Oracle函式系列(2)--數學函式及日期函式函式Oracle
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- 第7章 IF函式 COUNTIF函式 SUMIF函式函式
- 字元函式、數字函式和日期函式字元函式
- 【函式】Oracle EXTRACT()函式與to_char() 函式函式Oracle
- MySQL(四)日期函式 NULL函式 字串函式MySql函式Null字串
- 【函式】ORACLE函式大全函式Oracle
- (譯) 函式式 JS #2: 函式!函式JS