2011-04-14 92 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是不可靠的。

相关问题