2

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

以下两者之间有什么区别:

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

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

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

谢谢,-马特

4

3 回答 3

7

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

奖励:永远不要在函数定义中初始化列表!由于列表是可变的,因此可能会导致其持续存在,从而产生意想不到的结果!

于 2011-04-14T18:36:47.833 回答
1

第一个可以接受几乎任何提供的关键字参数(不管它只使用其中一个),而第二个只能接受两个。两者都不是 Pythonic,您只需使用适合该任务的那个。

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

于 2011-04-14T18:34:51.933 回答
1

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

于 2011-04-14T18:39:12.073 回答