當(dāng)一個(gè)函數(shù)有很多參數(shù)時(shí),調(diào)用者就需要提供多個(gè)參數(shù)牲剃。如果減少參數(shù)個(gè)數(shù),就可以簡(jiǎn)化調(diào)用者的負(fù)擔(dān)缠犀。
比如辨液,int()函數(shù)可以把字符串轉(zhuǎn)換為整數(shù)箱残,當(dāng)僅傳入字符串時(shí),int()函數(shù)默認(rèn)按十進(jìn)制轉(zhuǎn)換:
>>> int('12345')
12345
但int()函數(shù)還提供額外的base參數(shù)燎悍,默認(rèn)值為10谈山。如果傳入base參數(shù)宏怔,就可以做N進(jìn)制的轉(zhuǎn)換:
>>> int('12345', base=8)
5349
>>> int('12345', 16)
74565
假設(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
所以,functools.partial可以把一個(gè)參數(shù)多的函數(shù)變成一個(gè)參數(shù)少的新函數(shù)醋粟,少的參數(shù)需要在創(chuàng)建時(shí)指定默認(rèn)值重归,這樣,新函數(shù)調(diào)用的難度就降低了育苟。