當一個函式有很多引數時,呼叫者就需要提供多個引數。如果減少引數個數,就可以簡化呼叫者的負擔。
比如,int()函式可以把字串轉換為整數,當僅傳入字串時,int()函式預設按十進位制轉換:
>>> int('12345')
12345
但int()函式還提供額外的base引數,預設值為10表示十進位制。如果傳入base引數,就可以做 n 進位制的轉換:
>>> int('12345
', base=8)
5349
>>> int('
12345
', 16)
74565
假設要轉換大量的二進位制字串,每次都傳入int(x, base=2)非常麻煩,於是,我們想到,可以定義一個int2()的函式,預設把base=2傳進去:
def int2(x, base=2):return int(x, base)
這樣,我們轉換二進位制就非常方便了:
>>> int2('1000000')
64>>> int2('
1010101')
85
functools.partial就是幫助我們建立一個偏函式的,不需要我們自己定義int2(),可以直接使用下面的**建立一個新的函式int2:
>>> importfunctools
>>> int2 = functools.partial(int, base=2)
>>> int2('
1000000')
64>>> int2('
1010101')
85
所以,functools.partial可以把一個引數多的函式變成一個引數少的新函式,少的引數需要在建立時指定預設值,這樣,新函式呼叫的難度就降低了。
python3偏函式
python的functools模組提供了很多有用的功能,其中一個就是偏函式 partial function 。要注意,這裡的偏函式和數學意義上的偏函式不一樣。 通過設定引數的預設值,可以降低函式呼叫的難度。而偏函式也可以做到這一點。舉例如下 int 函式可以把字串轉換為整數,當僅傳入字串時,...
Python使用偏函式與類實現裝飾器
coding utf 8 author baoshan python對某個物件是否能通過裝飾器形式使用只有一個要求 decorator必須是...
Python中abc
import abc 指定metaclass屬性將類設定為抽象類,抽象類本身只是用來約束子類的,不能被例項化 class animal me...