前言 一個(gè)函數(shù)可以有多個(gè)參數(shù),,而在有的情況下有的參數(shù)先得到,,有的參數(shù)需要在后面的情景中才能知道,,python 給我們提供了partial函數(shù)用于攜帶部分參數(shù)生成一個(gè)新函數(shù),。 在functools模塊中有一個(gè)工具partial(),,可以用來(lái)"凍結(jié)"一個(gè)函數(shù)的參數(shù),并返回"凍結(jié)"參數(shù)后的新函數(shù),。 很簡(jiǎn)單的解釋,,也是官方手冊(cè)給的示例。對(duì)于int()函數(shù),,它可以將給定的數(shù)值轉(zhuǎn)換成十進(jìn)制整數(shù),,轉(zhuǎn)換時(shí)可以指定以幾進(jìn)制的方式解析給定的數(shù)。例如:
現(xiàn)在不想這樣指定base=2參數(shù)來(lái)將二進(jìn)制轉(zhuǎn)換為10進(jìn)制整數(shù)了,,而是像普通函數(shù)一樣,,直接指定待轉(zhuǎn)換的值即可。于是,,定義另外一個(gè)函數(shù)來(lái)封裝int(),,例如:
functools中提供的partial()就是做類似事情的:
它表示int()中指定參數(shù)base=2,也就是"凍結(jié)"了這個(gè)參數(shù),。
之所以"凍結(jié)"加上了引號(hào),,是因?yàn)榭梢栽趇nttwo()中再次指定參數(shù)來(lái)覆蓋partial()中"凍結(jié)"的參數(shù):
回頭再看partial()的定義:
從它的定義不難知道,不僅僅是像int()中base這樣的kw參數(shù)格式,,位置參數(shù)args也一樣能"凍結(jié)",。 partial()返回的其實(shí)是一個(gè)partial對(duì)象,這個(gè)對(duì)象包含了3個(gè)特殊的屬性:
另外需要注意的是,,partial()不會(huì)保留封裝函數(shù)的元數(shù)據(jù),,比如注釋文檔,、注解等。
所以如果需要這些元數(shù)據(jù),,必須自己手動(dòng)將元數(shù)據(jù)賦值給partial對(duì)象:
最后,除了partial()可以將函數(shù)的參數(shù)"凍結(jié)",,functools還提供了partialmethod()將方法的參數(shù)"凍結(jié)",,但基本上用不上,就連partial()也很少用,。 總結(jié) 以上就是這篇文章的全部?jī)?nèi)容了,,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,,謝謝大家對(duì)腳本之家的支持,。 |
|
來(lái)自: LibraryPKU > 《Python》