函数参数最佳实践:dict vs kwargs

时间:2020-06-22 17:38:11

标签: python python-3.x

我有一个Python最佳实践问题,但我在网上找不到一个很好的答案(可能是由于Google搜寻技巧不足)。当定义一个带有可变数量的键值对的函数时,我可以定义一个带有dict的参数,例如:

def func(dict_param):
    for key, value in dict_param.items():
        # do stuff

或允许函数使用**kwargs

def func(**kwargs):
    for key, value in kwargs.items():
        # do stuff

我的问题是:是否有任何理由在dict上使用**kwargs,反之亦然?它取决于吗?每个都有哪些警告?什么是最佳做法?

2 个答案:

答案 0 :(得分:0)

Zen of Python之后,显示:

显式优于隐式。

这两者都不应该替代实际在其签名中列出功能参数的情况。

假设您的用例将传递大量参数,则通常希望使用第一种形式。 相反,如果要处理的功能要支持可变数量的关键字参数,则应使用第二种形式。

请注意,通常两种形式是不相同的,因为第二种形式的键必须是字符串,即:

k

答案 1 :(得分:0)

使用def func(dict_param)时,如果未将参数dict_param作为参数传递,则此函数将出错。

但是,当使用def func(**kwargs)时,字典参数是可选的,并且该函数可以在不传递参数的情况下运行(除非有其他参数)

但正如norok2所说,

显式优于隐式。

因此,您应该始终设计函数以尝试避免使用这些模棱两可的参数,以避免任何潜在的类型错误。

希望这会有所帮助:)