4九、是否使用過functools中的函數?其做用是什麼?

functools模塊介紹python

  functools用於高階函數:指那些做用於函數或者返回其餘函數的函數。一般狀況下,只要是能夠被當作函數調用的對象就是這個模塊的目標。函數

functools模塊的功能spa

python 中提供一種用於對函數固定屬性的函數(與數學上的偏函數不同)code

# 一般會返回10進制
int('12345')  # print 12345 
 
# 使用參數 返回 8進制
int('11111', 8)  # print 4681

每次都得添加參數比較麻煩, functools提供了partial的方法對象

import functools foo = functools.partial(int, base=8) foo('11111')  # print 4681
經過這種方法生成一個固定參數的新函數
假設要轉換大量的二進制字符串,每次都傳入int(x, base=2)很是麻煩,因而,咱們想到,能夠定義一個int2()的函數,默認把base=2傳進去:
def int2(x, base=2): return int(x, base)

這樣,咱們轉換二進制就很是方便了:blog

>>> int2('1000000') 64
>>> int2('1010101') 85

 

functools.partial就是幫助咱們建立一個偏函數的,不須要咱們本身定義int2(),能夠直接使用下面的代碼建立一個新的函數int2:字符串

 

>>> import functools >>> int2 = functools.partial(int, base=2) >>> int2('1000000') 64
>>> int2('1010101') 85

因此,簡單總結functools.partial的做用就是,把一個函數的某些參數給固定住(也就是設置默認值),返回一個新的函數,調用這個新函數會更簡單。數學

注意到上面的新的int2函數,僅僅是把base參數從新設定默認值爲2,但也能夠在函數調用時傳入其餘值:class

>>> int2('1000000', base=10) 1000000

最後,建立偏函數時,實際上能夠接收函數對象、*args和**kwargs這3個參數,當傳入:import

int2 = functools.partial(int, base=2)

實際上固定了int()函數的關鍵字參數base,也就是:

int2('10010')

至關於:

kw = { 'base': 2 } int('10010', **kwargs)

當傳入:

max2 = functools.partial(max, 10)

實際上會把10做爲*args的一部分自動加到左邊,也就是:

max2(5, 6, 7)

至關於:

args = (10, 5, 6, 7) max(*args)
相關文章
相關標籤/搜索