大家好,我是季劼,今天我要講的是python的 partial function這個好用的功能
首先會先分成幾個部分,想要省時間的話可以自行跳到想看的部分!
1. 使用狀況及使用情境講解
想像一下,如果我們有一個吃很多參數的function,如下圖
每一次我們要取得結果的話,都要把每個參數都丟進去
但是! 使用的情境是b跟c大部分時間都不改變
這樣我們在每次呼叫的時候,都必須把b跟c都丟進去,
想像一下,如果這些參數名稱都很長,而且超多參數的話,
每次使用都要重新丟進去,不僅可讀性不佳,而且也要隨時注意其他參數的變化
解決方法1:
那也有人會說,那我們可以定義有預設數值的function啊,如下圖
沒錯! 這樣就可以解決,需要重複丟的問題了,
但是! 如果這個時候預設參數改變了,
那這樣還是需要重複丟入改變後的參數,還是十分不美觀和不方便
而且如果這個function是來自於別人的library,我們也不能重寫人家的function,
那要怎麼辦呢?
就要直接來到使用partial function的部份!
2. partial 使用方法
解決方法2:
使用partial function!,如下圖
可以看到,我們把原本的function丟進去,跟他指定要預先填寫b和c的值
這樣一來,就每次只要填寫改變的a就好了! 就是這麼簡單!
而且,好處是當某一個變數會有小改變的時候,
只要將前面的partial function重新填寫一次,
就可以又重複填寫a即可,這樣一來,我們的程式碼就簡潔好懂
還可以為我們的parital function定義一個更好懂更好解讀的名字,
這樣一來別人或自己未來看到,就可以馬上了解這個function的功能,是不是很棒呢!
知道partial function的用法之後,
要來順便介紹他的特別的使用方法,如下圖
可以看到,如果我們的partial function臨時想要改一個數值,
可以用指定的,就可以簡單更改了
在指定時,不能用位置的方式指定數值,必須要使用b=xx的直接指定的方式
那這個function的行為呢,其實就跟下方定義一個key word arg 的function一樣
增加了一個非常特別的符號 => *
這個符號表示 我們要把a之後的位置參數吸收掉,僅使用 b=xx這種方式指定參數
而partial 就可以每次更改都幫我們定義這樣的function,
是不是很方便呢?
這樣一來我們可以把別人寫好的function事先
部分填寫好特定的參數,或全部填寫好
沒有錯! 全部填寫好也可以喔,可以讓新的function只做預設的事情,不用管參數
有時候系統上固定的處理方式就可以這樣設定,然後把它傳給別的物件使用,
使得別的物件只要管使用就好了,不用管內部參數設定喔!
是不是很好用,可以多多利用partial 將你的程式碼變簡潔!