currying 的概念將函式式程式設計的概念和預設引數以及可變引數結合在一起。乙個帶n 個引數,curried 的函式固化第乙個引數為固定引數,並返回另乙個帶n-1 個引數函式物件,分別類似於lisp的原始函式car 和cdr 的行為。currying 能泛化成為偏函式應用(pfa), 這種函式將任意數量(順序)的引數的函式轉化成另乙個帶剩餘引數的函式物件。在某種程度上,這似乎和不提供引數,就會使用預設引數情形相似。這個特徵是在python2.5 的時候被引入的,通過functools 模組能很好的給使用者呼叫。
>>> from operator import add, mul
>>> from functools import partial
>>> add1 = partial(add, 1) # add1(x) == add(1, x)
>>> mul100 = partial(mul, 100) # mul100(x) == mul(100, x)
>>>
>>> add1(10)
11>>> add1(1)
2>>> mul100(10)
1000
>>> mul100(500)
50000
下面的乙個例子來自python 文件中關於在應用程式中使用,在這些程式中需要經常將二進位制(作為字串)轉換成為整數。這個例子使用了int()內建函式並將base 固定為2 來指定二進位制字串轉化。
>>> basetwo = partial(int, base=2)
>>> basetwo.__doc__ = 'convert base 2 string to an int.'
>>> basetwo('10010')
18
如果你建立了不帶base 關鍵字的偏函式,比如, basetwobad = partial(int, 2),這可能會讓引數以錯誤的順序傳入int(),因為固定引數總是放在執行時刻引數的左邊, 比如basetwobad(x) == int(2, x)。如果你呼叫它, 它會將2 作為需要轉化的數字,base 作為』10010』來傳入,接著產生乙個異常:
>>> basetwobad = partial(int, 2)
>>> basetwobad('10010')
traceback (most recent call last): file "", line 1, in typeerror: an integer is required
由於關鍵字放置在恰當的位置, 順序就得固定下來,因為,如你所知,關鍵字引數總是出現在形參之後, 所以basetwo(x) == int(x, base=2). python 偏函式應用
摘要 python的設計核心原則就是簡潔 在這種原則的指導下,誕生了lambda表示式和偏函式 二者都讓函式呼叫變得簡潔。本文主要為你介紹偏函式的應用。如果我們定義了乙個函式,比如說將四個數相加add one two,three,four 上層有很多函式需要呼叫這個函式。在這些呼叫中,80 的呼叫傳...
python偏函式應用
python的functools模組提供了很多有用的功能,其中乙個就是偏函式 partial function 要注意,這裡的偏函式和數學意義上的偏函式不一樣。在介紹函式引數的時候,我們講到,通過設定引數的預設值,可以降低函式呼叫的難度。而偏函式也可以做到這一點。舉例如下 int 函式可以把字串轉換...
python 偏函式 python 偏函式
functools.partial可以設定預設引數和關鍵字引數的預設值 python的functools模組提供了很多有用的功能,其中乙個就是偏函式 partial function 要注意,這裡的偏函式和數學意義上的偏函式不一樣。在介紹函式引數的時候,我們講到,通過設定引數的預設值,可以降低函式呼...