Python 关键字参数 vs kwargs

2 投票
3 回答
1724 浏览
提问于 2025-04-16 15:45

这可能是个简单的问题:

下面这两段代码有什么区别吗:

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

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

如果没有区别,哪种写法更符合Python的风格呢?

谢谢,

-Matt

3 个回答

1

第二种选择让我的参数可以作为位置参数传递,而不是作为关键字参数。我觉得在不实际使用**kwargs的情况下声明它是不太符合Python风格的。

1

第一个函数几乎可以接受任何你提供的关键词参数(虽然它只会用到其中一个),而第二个函数只能接受两个参数。没有哪个更符合Python的风格,你只需要根据任务选择合适的函数。

另外,第二个函数不是“关键词参数”,而是“默认值”。

7

对于一个简单的函数,明确地定义你的参数会更符合Python的风格。除非你真的需要接受不确定数量的参数,否则使用**kwargs这种方式会让事情变得复杂。

额外提醒:在函数定义时不要初始化一个列表!这样做可能会导致意想不到的结果,因为列表是可以改变的,会一直存在下去!

撰写回答