2011-04-14 87 views
2

這可能是一個簡單的問題:Python關鍵詞ARGS VS kwargs

有如下因素兩者之間有什麼區別:

def myfunc(a_list = [], **kwargs): 
    my_arg = kwargs.get('my_arg', None) 
    pass 

def myfucn(a_list = [], my_arg = None): 
    pass 

如果不是,這將被視爲更pythonic?

謝謝, -Matt

+3

更重要的是,切勿使用可變默認參數(上面的a_list)。詳情請看這裏:http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument – 2011-04-14 18:35:13

+1

Sidnote:不要使用'[]'作爲默認參數,因爲'[[ ]'是可變的。 http://google-styleguide.googlecode.com/svn/trunk/pyguide.html#Default_Argument_Values – birryree 2011-04-14 18:36:08

回答

7

對於一個簡單的函數,更明確地定義你的參數是Pythonic。除非您有合法要求接受任何數量的未知或可變參數,否則方法會增加不必要的複雜性。

獎勵:永遠不要在函數定義中初始化一個列表!這可能會導致意外的結果,因爲列表是可變的!

1

第一個可以採取實際上提供任何關鍵字參數(無論它僅使用它們中的一個的事實),而第二隻能取兩個。 Pythonic也不是這樣,你只需使用適合任務的那個。

此外,第二個不是「關鍵字參數」而是「默認值」。

1

第二個選擇允許my_arg作爲位置而不是關鍵字參數傳遞。如果你沒有實際使用它們,我會認爲宣佈**kwargs是不可靠的。

相關問題