本節書摘來自華章社群《編寫高品質python代碼的59個有效方法》一書中的第19條:用關鍵字參數來表達可選的行為,作者[美]布雷特·斯拉特金(brett slatkin),更多章節内容可以通路雲栖社群“華章社群”公衆号檢視
第19條:用關鍵字參數來表達可選的行為
與其他程式設計語言一樣,調用python函數時,可以按位置傳遞參數。
python函數中的所有位置參數,都可以按關鍵字傳遞。采用關鍵字形式來指定參數值時,我們會在表示函數調用操作的那一對圓括号内,以指派的格式,把參數名稱和參數值分别放在等号左右兩側。關鍵字參數的順序不限,隻要把函數所要求的全部位置參數都指定好即可。還可以混合使用關鍵字參數和位置參數來調用函數。下面這些調用,都是等效的:
位置參數必須出現在關鍵字參數之前。
每個參數隻能指定一次。
靈活使用關鍵字參數,能帶來三個重要的好處。
首先,以關鍵字參數來調用函數,能使讀到這行代碼的人更容易了解其含義。如果讀到了remainder(20, 7)這樣的調用代碼,那麼必須檢視方法的實作代碼,才能夠明白這兩個參數裡面,究竟哪一個是被除數,哪一個是除數。若是改用關鍵字的形式來調用,則立刻就能根據number=20和divisor=7等寫法來獲知每個參數的含義。
關鍵字參數的第二個好處是,它可以在函數定義中提供預設值。在大部分情況下,函數調用者隻需使用這些預設值就夠了,若要開啟某些附加功能,則可以指定相應的關鍵字參數。這樣做可以消除重複代碼,并使代碼變得整潔。
例如,要計算液體流入容器的速率。如果容器比較大,那麼可以根據兩個時間點上的重量差及時間差來判斷流率。
通常情況下,求出每秒鐘流過的千克數就可以了。然而某些時候,可能想根據傳感器上一次的讀數,在更大的時間跨度上面估算流率,如以小時或天來估算。隻需給函數添加一個參數,用來表示兩種時間段的比例因子,即可提供這種行為。
這樣寫的缺點是,每次調用函數時,都要指定period參數,即便我們想計算最常見的每秒流率,也依然要把1傳給period參數。
為了使函數調用語句能寫得簡單一些,我們可以給period參數定義預設值。
現在的period參數,就成了可選參數。
這種辦法适用于比較簡單的預設值。如果預設值比較複雜,這樣寫就不太好了,那種情況可以參考本書