Python 偏函數(shù)

Python的functiools模塊提供了很多有用的功能板驳,其中一個就是偏函數(shù)(Partial function)。要注意,這里的偏函數(shù)和數(shù)學意義上的偏函數(shù)不一樣峰尝。
在介紹函數(shù)參數(shù)的時候养晋,我們講到衬吆,通過設定參數(shù)的默認值,可以降低函數(shù)調(diào)用的難度绳泉。而偏函數(shù)也可以做到這一點逊抡。舉例:
int()函數(shù)可以把字符串轉(zhuǎn)換為整數(shù),當僅傳入字符串時零酪,int()函數(shù)默認按十進制轉(zhuǎn)換:

>>> int('12345')
12345

int()函數(shù)還提供額外的base參數(shù)冒嫡,默認值為10。如果傳入base參數(shù)四苇,就可以做N進制的轉(zhuǎn)換:

>>> int('12345', base = 8)
5349
>>> int ('12345',16)
74565

假設要轉(zhuǎn)換大量的二進制字符串孝凌,每次都傳入int(x, base=2)非常麻煩,于是月腋,我們想到蟀架,可以定義一個int2()的函數(shù)瓣赂,默認把base=2傳進去:

def int2(x, base=2):
    return int (x, base)

這樣,我們轉(zhuǎn)換二進制就非常方便了:

>>> int2 ('1000000')
64
>>> int2('1010101')
85

functools.partial就是幫助我們創(chuàng)建一個偏函數(shù)的辜窑,不需要我們自己定義int2()钩述,可以直接使用下面的代碼創(chuàng)建一個新的函數(shù)int2

>>> import functools
>>> int2 = functools.partial(int, base = 2)
>>> int2('1000000')
64
>>> int2('1010101')
85

所以,簡單總結(jié)functools.partial的作用就是穆碎,把一個函數(shù)的某些參數(shù)給固定住(也就是設置默認值)牙勘,返回一個新的函數(shù),調(diào)用這個新函數(shù)會更簡單所禀。
注意到上面的新的int2函數(shù)方面,僅僅是把base參數(shù)重新設定默認值為2,但也可以在函數(shù)調(diào)用時傳入其他值:

>>> int2('1000000', base = 10)
1000000

最后色徘,創(chuàng)建偏函數(shù)時恭金,實際上可以接受函數(shù)對象、*args**kw這3個參數(shù)褂策,當傳入:

int2 = functools.partial(int, base = 2)

實際上固定了int()函數(shù)的關鍵字參數(shù)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

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末斤寂,一起剝皮案震驚了整個濱河市耿焊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌遍搞,老刑警劉巖罗侯,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異溪猿,居然都是意外死亡钩杰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門诊县,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讲弄,“玉大人,你說我怎么就攤上這事依痊”艹” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵抗悍,是天一觀的道長。 經(jīng)常有香客問我钳枕,道長缴渊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任鱼炒,我火速辦了婚禮衔沼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己指蚁,他們只是感情好,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布凝化。 她就那樣靜靜地躺著稍坯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪搓劫。 梳的紋絲不亂的頭發(fā)上瞧哟,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音枪向,去河邊找鬼勤揩。 笑死,一個胖子當著我的面吹牛秘蛔,可吹牛的內(nèi)容都是我干的陨亡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼深员,長吁一口氣:“原來是場噩夢啊……” “哼负蠕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起辨液,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤虐急,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后滔迈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體止吁,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年燎悍,在試婚紗的時候發(fā)現(xiàn)自己被綠了敬惦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡谈山,死狀恐怖俄删,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奏路,我是刑警寧澤畴椰,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站鸽粉,受9級特大地震影響斜脂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜触机,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一帚戳、第九天 我趴在偏房一處隱蔽的房頂上張望玷或。 院中可真熱鬧,春花似錦片任、人聲如沸偏友。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽位他。三九已至,卻和暖如春犁钟,著一層夾襖步出監(jiān)牢的瞬間棱诱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工涝动, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留迈勋,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓醋粟,卻偏偏與公主長得像靡菇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子米愿,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 偏函數(shù)使用functools.partial可以創(chuàng)建一個新的函數(shù)厦凤,這個新函數(shù)可以固定住原函數(shù)的部分參數(shù),從而在調(diào)用...
    MJXH閱讀 1,611評論 0 1
  • 函數(shù)式編程就是一種抽象程度很高的編程范式育苟,純粹的函數(shù)式編程語言編寫的函數(shù)沒有變量较鼓,因此,任意一個函數(shù)违柏,只要輸入是確...
    齊天大圣李圣杰閱讀 1,534評論 0 2
  • 要點: 函數(shù)式編程:注意不是“函數(shù)編程”博烂,多了一個“式” 模塊:如何使用模塊 面向?qū)ο缶幊蹋好嫦驅(qū)ο蟮母拍睢傩浴?..
    victorsungo閱讀 1,521評論 0 6
  • 看到網(wǎng)上的例子: 結(jié)果: 也就是說漱竖,args接收的數(shù)據(jù)類型是單個的字符禽篱,*kwargs接收的數(shù)據(jù)類型是有名字有特指...
    阿莫米德閱讀 353評論 0 1
  • 牛頓無疑是科學界的天才,也許連他自己都沒有發(fā)現(xiàn)馍惹,其發(fā)現(xiàn)的自然界第三定律——作用力與反作用力躺率,卻也是解開人類行為的密...
    城市屋檐下閱讀 739評論 0 2