這可能是一個簡單的問題: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
這可能是一個簡單的問題: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
對於一個簡單的函數,更明確地定義你的參數是Pythonic。除非您有合法要求接受任何數量的未知或可變參數,否則方法會增加不必要的複雜性。
獎勵:永遠不要在函數定義中初始化一個列表!這可能會導致意外的結果,因爲列表是可變的!
第一個可以採取實際上提供任何關鍵字參數(無論它僅使用它們中的一個的事實),而第二隻能取兩個。 Pythonic也不是這樣,你只需使用適合任務的那個。
此外,第二個不是「關鍵字參數」而是「默認值」。
第二個選擇允許my_arg作爲位置而不是關鍵字參數傳遞。如果你沒有實際使用它們,我會認爲宣佈**kwargs
是不可靠的。
更重要的是,切勿使用可變默認參數(上面的a_list)。詳情請看這裏:http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument – 2011-04-14 18:35:13
Sidnote:不要使用'[]'作爲默認參數,因爲'[[ ]'是可變的。 http://google-styleguide.googlecode.com/svn/trunk/pyguide.html#Default_Argument_Values – birryree 2011-04-14 18:36:08