偏函數(shù)
當(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('123456')
輸出 123456
但int()函數(shù)還提供額外的base參數(shù),默認(rèn)值為10匾嘱。如果傳入base參數(shù)斤斧,就可以做 N 進(jìn)制的轉(zhuǎn)換:
int('12345',base=8)
或者
int('12345',8)
輸出 5349
假設(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)
functools.partial就是幫助我們創(chuàng)建一個(gè)偏函數(shù)的游昼,不需要我們自己定義int2(),可以直接使用下面的代碼創(chuàng)建一個(gè)新的函數(shù)int2:
import functools
int2 = functools.partial(int,base=2)
int2('1000000')
輸出 64
import functools
sorted_ignore_case = functools.partial(sorted,key=str.lower)
print sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit'])