Python关键字args vs kwargs

时间:2011-04-14 18:31:39

标签: python kwargs keyword-argument

这可能是一个简单的问题:

两者之间是否有任何区别:

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

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

如果不是,哪个会被认为更加pythonic?

谢谢, -Matt

3 个答案:

答案 0 :(得分:7)

对于一个简单的函数,显式定义你的参数更加Pythonic。除非您有合法的要求接受任意数量的未知或变量参数,否则**kwargs方法会增加不必要的复杂性。

奖励:永远不要在函数定义中初始化列表!由于列表是可变的,因此可能会导致意外结果!

答案 1 :(得分:1)

第一个可以提供提供的任何关键字参数(无论它只使用其中一个),而第二个只能使用两个。也不是Pythonic,你只需使用适合该任务的那个。

此外,第二个不是“关键字参数”,而是“默认值”。

答案 2 :(得分:1)

第二种选择允许my_arg作为位置而不是关键字参数传递。当你实际上没有将它们用于任何事情时,我会认为声明**kwargs是unpythonic。