我有一个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
,反之亦然?它取决于吗?每个都有哪些警告?什么是最佳做法?
答案 0 :(得分:0)
在Zen of Python之后,显示:
显式优于隐式。
这两者都不应该替代实际在其签名中列出功能参数的情况。
假设您的用例将传递大量参数,则通常希望使用第一种形式。 相反,如果要处理的功能要支持可变数量的关键字参数,则应使用第二种形式。
请注意,通常两种形式是不相同的,因为第二种形式的键必须是字符串,即:
k
答案 1 :(得分:0)
使用def func(dict_param)
时,如果未将参数dict_param
作为参数传递,则此函数将出错。
但是,当使用def func(**kwargs)
时,字典参数是可选的,并且该函数可以在不传递参数的情况下运行(除非有其他参数)
但正如norok2所说,
显式优于隐式。
因此,您应该始终设计函数以尝试避免使用这些模棱两可的参数,以避免任何潜在的类型错误。
希望这会有所帮助:)