1耕捞、Python中的偏函數(shù)和數(shù)學(xué)上的不一樣。Python中的函數(shù)參數(shù)可以設(shè)定默認(rèn)值烫幕,來降低函數(shù)調(diào)用的難度俺抽。舉例說明:
int()函數(shù)可以把字符串轉(zhuǎn)換成整數(shù),當(dāng)僅傳入字符串時(shí)较曼,int()函數(shù)默認(rèn)按10進(jìn)制進(jìn)行轉(zhuǎn)換:
int('123123')
# 123123
其實(shí)int()還提供額外的base參數(shù)磷斧,默認(rèn)值是10,如果傳入base參數(shù)捷犹,就可以做N進(jìn)制轉(zhuǎn)換:
int('12345',base=8)
#5349
int('12345',base=16)
#74565
假設(shè)需要轉(zhuǎn)換大量的二進(jìn)制字符串弛饭,每次傳入int(x,base=2)比較麻煩,于是我們就想到了自己寫一個(gè)方法int2()萍歉,把base=2默認(rèn)傳進(jìn)去:
def int2(x,base=2):
return int(x,base)
這樣我們就能直接使用int2()來轉(zhuǎn)換二進(jìn)制了
int2('10000000')
#64
下面就講偏函數(shù)侣颂,functools.partial,就是幫助我們來創(chuàng)建一個(gè)偏函數(shù)的:
import functools
int2=functools.partial(int,base=2)
int2('1000000')
#64
#也可以傳入base值
int2=functools.partial('1000000',base=10)
#1000000
其實(shí)創(chuàng)建偏函數(shù)時(shí),實(shí)際上可以接受函數(shù)對象枪孩,*args,**kw這三個(gè)參數(shù)憔晒,當(dāng)傳入:
int2=functools.partial(int,base=2)
實(shí)際上固定了int的關(guān)鍵字參數(shù)base,也就是:
int2('1000000')
當(dāng)傳入:
max2=functools.partial(max,10)
實(shí)際上會把10作為*args的一部分自動加到左邊蔑舞,也就是
max2(5,6,7)
#相當(dāng)于
args=(10,5,6,7)
max(*args)
#10
小結(jié):當(dāng)函數(shù)有多個(gè)參數(shù)拒担,且某些參數(shù)是固定的,那么就可以用偏函數(shù)來簡化他們了攻询。如果你對Java有所了解从撼,偏函數(shù)有點(diǎn)像Java中的方法重載