SONY DSC 



初學 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# 的我而言,這類的寫法的確是相當的新鮮,也讓程式的維護較為簡單。

創作者介紹
創作者 卑微研究生 的頭像
卑微研究生

卑微研究生的部落格

卑微研究生 發表在 痞客邦 留言(1) 人氣()