當(dāng)一個函數(shù)有很多參數(shù)時,調(diào)用者就需要提供多個參數(shù)。如果減少參數(shù)個數(shù),就可以簡化調(diào)用者的負(fù)擔(dān)。
比如,int()函數(shù)可以把字符串轉(zhuǎn)換為整數(shù),當(dāng)僅傳入字符串時,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)非常麻煩,于是,我們想到,可以定義一個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)建一個調(diào)用另外一個部分參數(shù)或變量已經(jīng)預(yù)置的函數(shù)”的函數(shù)的用法,如上所示,int()函數(shù)的base參數(shù),沒有指定的時候,默認(rèn)是以十進(jìn)制工作的,當(dāng)指定base=2的時候,int2實際上就變成了部分參數(shù)(base)已經(jīng)預(yù)置了的偏函數(shù)。
functools.partial就是幫助我們創(chuàng)建一個偏函數(shù)的,不需要我們自己定義int2(),可以直接使用下面的代碼創(chuàng)建一個新的函數(shù)int2:
>>> import functools >>> int2 = functools.partial(int, base=2) >>> int2('1000000') 64 >>> int2('1010101') 85
所以,functools.partial可以把一個參數(shù)多的函數(shù)變成一個參數(shù)少的新函數(shù),少的參數(shù)需要在創(chuàng)建時指定默認(rèn)值,這樣,新函數(shù)調(diào)用的難度就降低了。
在前面,我們在sorted這個高階函數(shù)中傳入自定義排序函數(shù)就可以實現(xiàn)忽略大小寫排序。請用functools.partial把這個復(fù)雜調(diào)用變成一個簡單的函數(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'])
請驗證,完成請求
由于請求次數(shù)過多,請先驗證,完成再次請求
打開微信掃碼自動綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報