Python 偏函式用法全方位解析

2022-08-26 10:18:10 字數 2588 閱讀 2127

python的functools模組中有一種函式叫「偏函式」,自從接觸它以來,發現確實是乙個很有用且簡單的函式,相信你看完這篇文章,你也有相見恨晚的感覺。

我們都知道,函式入參可以設定預設值來簡化函式呼叫,而偏函式的作用就是將入參進行預設填充,降低函式使用的難度

如int()函式,可以將字元型轉換為整型,且預設的都是以十進位制形式來轉換,那為什麼一定是十進位制呢?如果想用以二進位制的形式轉換呢?其實我們可以看一下int函式它本身的定義

可以看到int有兩種用法,可以傳乙個位置引數,還可以多傳乙個關鍵字引數base,也就是基於什麼格式轉換,預設不傳base引數是以十進位制轉換。所以,用二進位制形式轉換的話只要base=2即可(見下方**)

1 value = int('

10000')

2print(value) #

10000

34 value = int('

10000

', base=2)

5print(value) #

16

如果每次轉換的字串的時候都要輸入base引數,顯得很麻煩,因此偏函式的作用就體現出來了,可以使用functools.partial()函式來重新定義

1

from functools import

partial

23 int2 = partial(int, base=2)

4 res = int2('

10000')

5print(res) #

16

到這裡,你應該已經感覺到了偏函式的一點點魅力吧,那我們再從多個角度進一步看透它。

1 

defadd(a, b, c):

2print('

a=',a,'

b=',b,'c='

,c)3

return a + b +c

45 add10 = partial(add, 10)

6 res = add10(1, 2) #

a= 10 b= 1 c= 2

如上**中,partial(add, 10)入參並沒有指定哪個關鍵字引數,函式卻預設的將這個值傳給了第乙個引數a,那就說明,當沒有指定預設引數時,預設賦值給第乙個引數,餘下引數按位置引數賦值

1

def sum(*args):

2 s =0

3for n in

args:

4 s +=n

5returns6

7 sum10 = partial(sum, 10)

8print(sum10(1)) #119

print(sum10()) #

10

按上述理解,沒有指定預設引數時,預設賦給第乙個引數,那麼第乙個引數永遠是10,後面再傳入參的話就從第二個引數開始計算,因此會實現10 + 1 = 11 的結果。同樣,如果不繼續傳參的話,只有預設的10,所以結果就是10

1 d = 

2 v =

3def show(**kw):

4for k in

kw:5

print

(k, kw.get(k))

67 showdef = partial(show, **v)

8 showdef(**d) 9#

default 10010#

value1 1011#

value2 20

同理,此時入參由於是可變引數,因此預設是第乙個傳入,先列印default關鍵字,這裡關注一下函式的寫法,可變關鍵字引數要寫成(**v)

1

def student(name, *, age, city):

2print('

name:

',name, '

age:

',age, '

city:

',city)

34 studentage = partial(student, age=20)

5 studentage('

tom','

beijing')

6#typeerror: student() takes 1 positional argument but 2 positional arguments (and 1 keyword-only argument) were given

我們知道,當用*號分隔開,表示後面的關鍵字引數是必傳的,因此對於預設引數也是同樣適用,即當引數為必傳時,偏函式也需要對每個關鍵字引數設定預設值。因此修改後為

1 studentage = partial(student, age=20, city='

beijing')

2 studentage('

tom') #

name: tom age: 20 city: beijing

綜上,偏函式可以將目標函式的部分引數固化後,重新定義為新的函式,降低了編碼的複雜度,尤其是當引數很多的時候,或者只用到其中某些引數的場景下時,效果更為顯著。

Python 「偏函式」 用法全方位解析

python的functools模組中有一種函式叫 偏函式 自從接觸它以來,發現確實是乙個很有用且簡單的函式,相信你看完這篇文章,你也有相見恨晚的感覺。我們都知道,函式入參可以設定預設值來簡化函式呼叫,而偏函式的作用就是將入參進行預設填充,降低函式使用的難度。如int 函式,可以將字元型轉換為整型,...

python 偏函式 python 偏函式

functools.partial可以設定預設引數和關鍵字引數的預設值 python的functools模組提供了很多有用的功能,其中乙個就是偏函式 partial function 要注意,這裡的偏函式和數學意義上的偏函式不一樣。在介紹函式引數的時候,我們講到,通過設定引數的預設值,可以降低函式呼...

python偏函式的例項用法總結

1 當函式的引數太多,需要簡化時,使用functools.partial可以建立乙個新的函式。2 這個新的函式可以固定原始函式的部分引數,從而更容易呼叫。作用是固定乙個函式的某些引數 cijguz即設定預設值 返回乙個新函式,呼叫這個新函式會更容易。import functools int2 fun...