Python使用functools模塊中的partial函數(shù)生成偏函數(shù)
python 中提供一種用于對(duì)函數(shù)固定屬性的函數(shù)(與數(shù)學(xué)上的偏函數(shù)不一樣)
# 通常會(huì)返回10進(jìn)制
int('12345') # print 12345
# 使用參數(shù) 返回 8進(jìn)制
int('11111', 8) # print 4681
每次都得添加參數(shù)比較麻煩, functools提供了partial的方法
import functools
foo = functools.partial(int, base=8)
foo('11111') # print 4681
通過(guò)這種方法生成一個(gè)固定參數(shù)的新函數(shù).
假設(shè)要轉(zhuǎn)換大量的二進(jìn)制字符串,每次都傳入int(x, base=2)非常麻煩,于是,我們想到,可以定義一個(gè)int2()的函數(shù),默認(rèn)把base=2傳進(jìn)去:
def int2(x, base=2): return int(x, base)
這樣,我們轉(zhuǎn)換二進(jìn)制就非常方便了:
>>> int2('1000000')
64
>>> int2('1010101')
85
functools.partial就是幫助我們創(chuàng)建一個(gè)偏函數(shù)的,不需要我們自己定義int2(),可以直接使用下面的代碼創(chuàng)建一個(gè)新的函數(shù)int2:
>>> import functools
>>> int2 = functools.partial(int, base=2)
>>> int2('1000000')
64
>>> int2('1010101')
85
所以,簡(jiǎn)單總結(jié)functools.partial的作用就是,把一個(gè)函數(shù)的某些參數(shù)給固定?。ㄒ簿褪窃O(shè)置默認(rèn)值),返回一個(gè)新的函數(shù),調(diào)用這個(gè)新函數(shù)會(huì)更簡(jiǎn)單。
注意到上面的新的int2函數(shù),僅僅是把base參數(shù)重新設(shè)定默認(rèn)值為2,但也可以在函數(shù)調(diào)用時(shí)傳入其他值:
>>> int2('1000000', base=10)
1000000
最后,創(chuàng)建偏函數(shù)時(shí),實(shí)際上可以接收函數(shù)對(duì)象、*args和**kw這3個(gè)參數(shù),當(dāng)傳入:
int2 = functools.partial(int, base=2)
實(shí)際上固定了int()函數(shù)的關(guān)鍵字參數(shù)base,也就是:
int2('10010')
相當(dāng)于:
kw = { 'base': 2 }
int('10010', **kw)
當(dāng)傳入:
max2 = functools.partial(max, 10)
實(shí)際上會(huì)把10作為*args的一部分自動(dòng)加到左邊,也就是:
max2(5, 6, 7)
相當(dāng)于:
args = (10, 5, 6, 7) max(*args)
結(jié)果為10。
相關(guān)文章
pytorch 優(yōu)化器(optim)不同參數(shù)組,不同學(xué)習(xí)率設(shè)置的操作
這篇文章主要介紹了pytorch 優(yōu)化器(optim)不同參數(shù)組,不同學(xué)習(xí)率設(shè)置的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-05-05
關(guān)于如何使用python的logging庫(kù)
這篇文章主要介紹了關(guān)于如何使用python的logging庫(kù),logging是Python標(biāo)準(zhǔn)庫(kù)中用于記錄日志的模塊。它提供了一種簡(jiǎn)單但靈活的方法來(lái)記錄程序中的事件,以便稍后進(jìn)行調(diào)試和分析,需要的朋友可以參考下2023-04-04
Python?Panda中索引和選擇?series?的數(shù)據(jù)
這篇文章主要介紹了Python?Panda中索引和選擇series的數(shù)據(jù),文章通過(guò)圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
PyTorch中的詞嵌入層(nn.Embedding)詳解與實(shí)戰(zhàn)應(yīng)用示例
詞嵌入解決NLP維度災(zāi)難,捕捉語(yǔ)義關(guān)系,PyTorch的nn.Embedding模塊提供靈活實(shí)現(xiàn),支持參數(shù)配置、預(yù)訓(xùn)練及變長(zhǎng)序列處理,廣泛應(yīng)用于文本分類、LSTM等模型,合理使用可顯著提升性能,本文給大家介紹PyTorch中的詞嵌入層(nn.Embedding)詳解與實(shí)踐指南,感興趣的朋友一起看看吧2025-07-07
Python基礎(chǔ)實(shí)戰(zhàn)總結(jié)
今天要給大家介紹的是Python基礎(chǔ)實(shí)戰(zhàn),本文主要以舉例說(shuō)明講解:?jiǎn)栴}的關(guān)鍵點(diǎn)就是在于構(gòu)造姓名,學(xué)號(hào)和成績(jī),之后以字典的形式進(jìn)行寫入文件。這里準(zhǔn)備兩個(gè)列表,一個(gè)姓,一個(gè)名,之后使用random庫(kù)進(jìn)行隨機(jī)字符串拼接,得到姓名,需要的朋友可以參考一下2021-10-10
python GUI庫(kù)圖形界面開發(fā)之PyQt5簡(jiǎn)單繪圖板實(shí)例與代碼分析
這篇文章主要介紹了python GUI庫(kù)圖形界面開發(fā)之PyQt5簡(jiǎn)單繪圖板實(shí)例與代碼分析,需要的朋友可以參考下2020-03-03

