python中partial的使用規(guī)則

前天看到了partial的一個新用法,記錄一下顿锰。

概念

函數(shù)聲明如下:

functools.partial(func[,*args][, **keywords])

返回一個可以像函數(shù)一樣被調用的partial實例呛哟,在調用時使用args和keywords參數(shù)。使用python實現(xiàn)時盹沈,類似于:

def partial(func, *args, **keywords):
    def newfunc(*fargs, **fkeywords):
        newkeywords = keywords.copy()
        newkeywords.update(fkeywords)
        return func(*(args + fargs), **newkeywords)
    newfunc.func = func
    newfunc.args = args
    newfunc.keywords = keywords
    return newfunc

通常的使用方法

通常的用法是在原函數(shù)聲明的參數(shù)中,從前往后連續(xù)將參數(shù)值固定:

>>> from functools import partial
>>> def test_partial(a, b, c, d):
...     print a,b,c,d
...
>>> test1 = partial(test_partial,1,2)
>>> test1(3,4)
1 2 3 4
>>> test2 = partial(test_partial,1,2,3,4)
>>> test2(3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: test_partial() takes exactly 4 arguments (5 given)

這通常只能把前面的參數(shù)固定吃谣,假如有個需求和現(xiàn)有的不一樣乞封,需要使后面的參數(shù)固定,該怎么做岗憋?可以使用下面的方法

新的使用方法

1.使用關鍵字參數(shù)

>>> test3 = partial(test_partial, d=4)
>>> test3(1,2,3)
1 2 3 4
  1. 其限制
>>> test4 = partial(test_partial, c=3, d=4)
>>> test4(1,2)
1 2 3 4
>>> test5 = partial(test_partial, b=2, d=4)
>>> test5(1,3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: test_partial() got multiple values for keyword argument 'b'

可以看到肃晚,當只對b和d賦值,然后調用時會報錯仔戈,關鍵值參數(shù)有多個值关串。我們試試在調用時拧廊,使用關鍵字c看看:

>>> test5(1,c=3)
1 2 3 4

可以看出,這樣也可以正常調用晋修。

  1. 如果對前面的參數(shù)默認賦值吧碾,會出現(xiàn)什么情況?是不是和以前一樣墓卦,只需要使用列表參數(shù)就行了倦春?
>>> test6 = partial(test_partial, a=1,b=3)
>>> test6(3,4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: test_partial() got multiple values for keyword argument 'a'

顯然不行,最后還是得使用關鍵字參數(shù)進行調用落剪。

總結

從上面的運行結果來看溅漾,使用partial規(guī)則如下:

  1. 將前面連續(xù)的參數(shù)固定,就可以直接繼續(xù)按照原來的參數(shù)繼續(xù)調用著榴。如
 >>> test1 = partial(test_partial,1,2)
 >>> test1(3,4)
 1 2 3 4
  1. 將后面的連續(xù)參數(shù)固定,就可以直接繼續(xù)使用原來的參數(shù)進行調用屁倔。如
>>> test4 = partial(test_partial, c=3, d=4)
>>> test4(1,2)
1 2 3 4
  1. 如果默認參數(shù)值不是連續(xù)的或者是直接對前面的連續(xù)參數(shù)賦值脑又,那么就需要使用關鍵字參數(shù)進行調用,如
>>> test5(1,c=3)
1 2 3 4
>>> test6(c=3,d=4)
1 3 3 4
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末锐借,一起剝皮案震驚了整個濱河市问麸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钞翔,老刑警劉巖严卖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異布轿,居然都是意外死亡哮笆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門汰扭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稠肘,“玉大人,你說我怎么就攤上這事萝毛∠钜酰” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵笆包,是天一觀的道長环揽。 經(jīng)常有香客問我,道長庵佣,這世上最難降的妖魔是什么歉胶? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮秧了,結果婚禮上跨扮,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好衡创,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布帝嗡。 她就那樣靜靜地躺著,像睡著了一般璃氢。 火紅的嫁衣襯著肌膚如雪哟玷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天一也,我揣著相機與錄音巢寡,去河邊找鬼。 笑死椰苟,一個胖子當著我的面吹牛抑月,可吹牛的內容都是我干的。 我是一名探鬼主播舆蝴,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谦絮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了洁仗?” 一聲冷哼從身側響起层皱,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赠潦,沒想到半個月后叫胖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡她奥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年瓮增,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哩俭。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡钉赁,死狀恐怖,靈堂內的尸體忽然破棺而出携茂,到底是詐尸還是另有隱情你踩,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布讳苦,位于F島的核電站带膜,受9級特大地震影響,放射性物質發(fā)生泄漏鸳谜。R本人自食惡果不足惜膝藕,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咐扭。 院中可真熱鬧芭挽,春花似錦滑废、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽誓禁。三九已至肉盹,卻和暖如春百宇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背昙篙。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工腊状, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人苔可。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓缴挖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親焚辅。 傳聞我的和親對象是個殘疾皇子醇疼,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內容