functools模組中的函式

2022-06-30 16:00:14 字數 1549 閱讀 3909

補充:partial方法

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

# 通常會返回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)

這樣,我們轉換二進位制就非常方便了:

>>> 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,但也可以在函式呼叫時傳入其他值:

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

1000000

最後,建立偏函式時,實際上可以接收函式物件、*args和**kwargs這3個引數,當傳入:

int2 = functools.partial(int, base=2)
實際上固定了int()函式的關鍵字引數base,也就是:

int2('10010')
相當於:

kw = 

int('10010', **kwargs)

當傳入:

max2 = functools.partial(max, 10)
實際上會把10作為*args的一部分自動加到左邊,也就是:

max2(5, 6, 7)
相當於:

args = (10, 5, 6, 7)

max(*args)

functools模組中partial的使用

functools.partial func args 關鍵字 返回乙個新的部分物件 當被呼叫時,其行為類似於 使用位置引數 args 和關鍵字引數 關鍵字呼叫的 func args 如果提供了其他關鍵字引數,則它們會擴充套件和覆蓋 關鍵字。簡單說就是把乙個函式,和該函式所需傳的引數封裝到乙個cla...

Python中functools模組的常用函式解析

1.partial 首先是partial函式,它可以重新繫結函式的可選引數,生成乙個callable的partial物件 int 10 實際上等同於int 10 base 10 和int 10 10 10 int 10 2 實際上是int 10 base 2 的縮寫 2 from functools...

Python標準模組 functools

functools,用於高階函式 指那些作用於函式或者返回其它函式的函式,通常只要是可以被當做函式呼叫的物件就是這個模組的目標。在python 2.7 中具備如下方法,cmp to key,將乙個比較函式轉換關鍵字函式 partial,針對函式起作用,並且是部分的 reduce,與python內建的...