偏函式:partial function。在python中偏函式的作用是把函式的某些引數給固定住了(設定默值),返回乙個新的函式,呼叫這個新的函式會更簡單。
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)
functools.partial中已經建立乙個偏函式:
>>> import functools
>>> int2 = functools.partial(int, base=2)
>>> int2('1000000')
64>>> int2('1010101')
85
注意:建立的int2()函式僅僅把base引數重新設定預設值為2,但也可以在函式呼叫時傳入其他值:
>>> int2('1000000', base=10)
1000000
建立偏函式時,實際上可以接受函式物件,*args和**kw這三個引數:
int2 = functools.partial(int, base=2)
實際上是固定了int()函式的桿件引數base,即int2('10010');相當於kw= int('10010',**kw).
當傳入:
max2 = functools.partial(max, 10)
實際上是吧10作為*args的一部分自動加搭配左邊,即max2(5,6,7),相當於:args=(10,5,6,7) max(*args),結果是10。
總結:當函式的引數個數太多,需要簡化的時候,使用functools.partial可以建立乙個新的函式,這個新的函式可以固定住原函式的部分引數,從而在呼叫是更簡單。
python函式式程式設計 高階函式 偏函式
三大特性 immutable data不可變資料 first class functions函式像變數一樣使用 尾遞迴優化 每次遞迴都重用stack 好處 parallelization並行 lazy evaluation惰性求值 determinism 確定性 函式式程式設計 map reduce...
函式式程式設計 偏函式
如下 coding utf 8 print int 12345 print int 12345 base 8 print int 12345 16 def int2 x,base 2 return int x,base print int2 1000000 print int2 1010101 im...
Python函式式程式設計之reduce函式
reduce f,itr reducer 先將itr 迭代器 裡面的前兩個值傳遞給函式 f 計算出結果,然後再同第三個值通過 f 計算出結果。一直迭代,直到沒有其他值為止。譬如 reducer f,v1,v2,v3,v4 轉化後的方程是 f f f v1,v2 v3 v4 高階函式 reducer ...