close
初學 Python,看到有些範例會有 **kwargs 的用法,一開始不知道其意義,後來才知道它就是所謂的 keyword arguments。
先看下列的程式碼,api_function 就假設是第三方設計的 API,而 func_call_api 則是我們自己維護的 function。
def api_function(a, b, c): print a print b print c def func_call_api(a, b, c): api_function(a=a+1, b=b+1, c=c+1) func_call_api(a=1,b=2,c=3)
這樣的程式一開始不會有什麼問題,但假設計設這個 API 的人很機車,喜歡亂改 API 的參數,把原本的 a,b,c 參數改成 a,b,c,d,e,就會造成很大的問題。
def api_function(a, b, c, d, e): print a print b print c print d print e def func_call_api(a, b, c, d, e): api_function(a=a+1, b=b+1, c=c+1, d, e) func_call_api(a=1,b=2,c=3,d=4,e=5)
從上面的程式碼,得知 API 一改,要更動的地方就會有兩個,假設我們的程式也不是那麼在意後來多加的參數,那可以用以下的寫法:
def api_function(a, b, c, d, e): print a print b print c print d print e def func_call_api(a, b, c, **kwargs): api_function(a=a, b=b, c=c, **kwargs) func_call_api(a=1,b=2,c=3,d=4,e=5)
雖然最後程式還是得更動,但至少幅度比較小。至於那 kwarg 是什麼,將它列印出來就會發現它是一個 dictionary object,內容會是 {'e': 5, 'd': 4}。對於一直以來只寫 C# 的我而言,這類的寫法的確是相當的新鮮,也讓程式的維護較為簡單。
全站熱搜
留言列表