Last Updated on 2021-03-28 by Clay
上次簡單教完了如何建立一個最基本的 function,今天來談談就連我個人也很少用的傳入值 —— default, *args, **kwargs。
當然,講解部份可能有點我流,建議大家多動手試試不同的程式碼,不要在意我的廢話。
default
所謂的 default,指的當然便是函式的輸入值『預設數值』。
以下我們來看個簡單的範例。
def test(n, a=1, b=2): print(n+a+b)
這是一個再簡單不過 function,看過之前課程的大家想必駕輕就熟:
test(1, 2, 3)
Output:
6
那麼,我所說的 default 到底在哪裡呢?
test(1)
沒錯,這個 function 我們只需要輸入一個參數就可以了!其餘的參數 function 會自動依照預設值來填入。
由此可見,我們的 Output:
4
1 + 1 + 2 = 4 —— 看起來沒有毛病!
*args
那麼,*args 又是個什麼樣的參數呢?直觀地來講,它可以代表著是『沒有限定長度的參數輸入』。
我們以實例來講解:
def test(n, *args): a = n for arg in args: a += arg print(a)
然後,我們輸入超過兩個輸入值:
test(1, 2, 3, 4, 5, 6)
結果會是什麼呢?
21
1 + 2 + 3 + 4 + 5 + 6 = 21 !
沒錯,也就是說,除了 1 為變數 n 外,其餘都是 *args 的輸入值!
這樣一來,有沒有比較懂我所說的『沒有限定長度的參數輸入』的意思呢?
**kwargs
最後,終於來到今天的重頭戲 —— **kwargs 啦!
跟 *args 相比,我們在輸入參數給 function 的時候,一定要加上變數名,如此一來才能正確地判別那個參數是屬於 **kwargs 的。
順帶一提,在 function 的構成規則中, *args 必須放置在 **kwargs 之前,如此一來,我們程式的 Parser 才不會搞錯我們輸入的語法。
一樣,以下簡單地帶大家看著範例:
def test(n, **kwargs): print(n) for a, b in kwargs.items(): print(a, b)
我們可以清楚看到, **kwargs 有著像是 dict 型態一般的東西 (這我在之後的課程中會提到,大概)
於是就像我說的,我們要確實地指定我們要輸入的值。
test(1, key=3, value=9)
Output:
1
key 3
value 9
這樣大家有沒有比較了解了呢?
我當初在學習 Python 的時候,有幸見到並學習過大神開發的代碼,那時候大神總是劈哩啪啦地使用這種 *args、**kwargs ——使用起來一套一套的,看得人眼花撩亂。
事後一直過了好久,我才終於明白當時的程式碼到底是在寫什麼呢!
距離我當初設計要寫的 Python 基本教學,剩下的內容已經不到八個項目啦!漸漸地離我想寫的後續教學越來越近了!我抱持著想分享一些知識給大家的想法也還是沒有變。
希望能寫進階教學課程的那一天盡早到來。