測開之函式進階· 第5篇《偏函式》

清菡發表於2020-12-30

什麼是偏函式

偏函式在functools的模組裡有個partial,這個東西就叫做偏函式。

怎麼用偏函式?

當函式的引數個數太多,需要簡化時,使用 functools.partial 可以建立一個新的函式,這個新函式可固定住原函式的部分引數,從而在呼叫時更簡單。

偏函式可以幫我們固定引數,簡化引數呼叫的流程。如果當前有個介面,去呼叫這個介面的時候,這個介面需要傳 50 個引數,你發現前面 49 個引數都是一樣的不會變化的,這 49 個引數設定成必須要傳的引數,只有一個變化的引數,呼叫的時候非常不方便。

偏函式可以將前面 49 個引數固定住,再次呼叫的時候只需要傳一個引數(只需傳那個變化的引數)。

之前學到的內建函式中filter中,呼叫的時候需要傳入 2 個引數,第一個是函式,第二個是需要過濾的可迭代型別的資料。

# 可以通過傳入不同的過濾條件去過濾出來我們需要的資料

filter(lambda x:x>3,li)
filter(lambda x:x>5,li)

用偏函式,程式碼可以這樣寫:

from functools import partial

# 過濾掉小於5的資料,大於5的資料全部保留下來了

li1 = [1, 2, 3, 11, 22, 33]
li2 = [1, 2, 3, 11, 22, 33]
li3 = [1, 2, 3, 11, 22, 33]
li4 = [1, 2, 3, 11, 22, 33]
li5 = [1, 2, 3, 11, 22, 33]
li6 = [1, 2, 3, 11, 22, 33]
li7 = [1, 2, 3, 11, 22, 33]


# 之前的寫法

# filter(lambda x:x>5,li)
# filter(lambda x:x>5,li2)
# filter(lambda x:x>5,li3)
# filter(lambda x:x>5,li4)

#那麼這個時候每次都要傳入同樣的引數,比較麻煩。

#通過偏函式建立一個新函式,提前傳入原函式所需要的引數,呼叫的時候更簡單。

li = [1, 2, 122, 331, 11, 22, 33, 4, 6, 7, 2, 88, 31]
filter2 = partial(filter, lambda x: x > 5)
res=filter2(li)
print(list(res))
res2=filter2(li2)
print(list(res2))

functools的原始碼:

它的意思是不定行引數(隨便多少引數都可以)。

  • 鄭重宣告:公眾號“清菡軟體測試”首發,更多原創文章:清菡軟體測試 114+原創文章,歡迎關注、交流,禁止第三方未經同意擅自轉載。

熱文精選

相關文章