这可能是一个简单的问题: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