Python3 進階篇——偏函數的使用

我們之前講了lambda創建匿名函數,可以使我們的代碼更加的簡潔,那麼我們接着來講解一下什麼是偏函數?偏函數有什麼樣的作用

接下來我們先來看一個栗子:

print('aaaaaaaaaa')
print('bbbbbbbbbb')
print('cccccccccc')

# 輸出結果:
# aaaaaaaaaa
# bbbbbbbbbb
# cccccccccc

上面是我們經常會使用到的一個函數,print()可以打印我們想要輸出的數據,我們會發現每一行它自動換行了;

這個之前我們也講解過,在print()這個函數裏有一個參數叫 end='\n',它的默認值就是換行,所以在我們每次輸出完數據之後,他都會額外在輸出一個 '\n' ,那我們要是不想讓他自動換行該怎麼辦呢?

print('aaaaaaaaaa',end='')
print('bbbbbbbbbb',end='')
print('cccccccccc',end='')

# 輸出結果:
# aaaaaaaaaabbbbbbbbbbcccccccccc

我們只需要手動修改默認參數就好了,但是這樣豈不是很麻煩,如果我們要調用一百次不換行輸出,那豈不是要寫一百遍?

那麼我們可以重新定義一個函數,在這個函數裏面將默認值進行修改:

def print2(s,end=''):
    print(s,end=end)

print2('aaaaaaaaaa')
print2('bbbbbbbbbb')
print2('cccccccccc')

# 輸出結果:
# aaaaaaaaaabbbbbbbbbbcccccccccc

這樣好像就方便多了,其實我們還有一個更加簡便的方法,就是偏函數,我們先來看一下具體怎麼使用:

from functools import partial

print2 = partial(print,end='')

print2('aaaaaaaaaa')
print2('bbbbbbbbbb')
print2('cccccccccc')

# 輸出結果:
# aaaaaaaaaabbbbbbbbbbcccccccccc

我們可以調用partial()定義偏函數,在偏函數中我們可以修改默認參數,或者將參數設置默認值;

partial(函數名,參數名=參數值[,參數名=參數值])

那麼,我們再看一個例子,我們對int()都不陌生,我們先來簡單看下他的函數定義:

我們發現這裏面還有一個 base=10 這麼個參數,它的作用就是說進行強制類型轉換的數據是幾進制的,我們來舉個栗子:

print(int('111',base=16))
print(int('111',base=8))
print(int('111',base=2))

# 輸出結果:
# 273
# 73
# 7

默認情況下就是十進制到十進制,如果我們需要從二進制到十進制就需要修改 base這個參數了,同樣的道理,我們想要大面積使用就可以用partial()進行創建一個偏函數:

int2 = partial(int,base=2)

print(int2('111'))

# 輸出結果:
# 7

當我們發現, 在函數的調用中,有某個參數經常爲一個固定值時,我們也可以定義一個偏函數進行調用:

def sum_num(a,b,c,d):
    return a+b+c+d

sum_num2 = partial(sum_num,c=12)

print(sum_num(1,2,12,4))
print(sum_num2(1,2,d=4))

# 輸出結果:
# 19
# 19

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章