當(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
偏函數(shù)指的就是“創(chuàng)建一個(gè)調(diào)用另外一個(gè)部分參數(shù)或變量已經(jīng)預(yù)置的函數(shù)”的函數(shù)的用法,如上所示,int()函數(shù)的base參數(shù),沒有指定的時(shí)候,默認(rèn)是以十進(jìn)制工作的,當(dāng)指定base=2的時(shí)候,int2實(shí)際上就變成了部分參數(shù)(base)已經(jīng)預(yù)置了的偏函數(shù)。
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)用的難度就降低了。
在前面,我們?cè)趕orted這個(gè)高階函數(shù)中傳入自定義排序函數(shù)就可以實(shí)現(xiàn)忽略大小寫排序。請(qǐng)用functools.partial把這個(gè)復(fù)雜調(diào)用變成一個(gè)簡(jiǎn)單的函數(shù):
sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit'])
參考答案:
import functools sorted_ignore_case = functools.partial(sorted, key=lambda item: item.lower()) sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit'])
請(qǐng)驗(yàn)證,完成請(qǐng)求
由于請(qǐng)求次數(shù)過多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求
打開微信掃碼自動(dòng)綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報(bào)