我想知道关于函数默认值的最佳实践。
我们说我有一个功能:
def my_function(x, **kwargs):
kwargs_default = {'boolean_offset': False}
kwargs_default.update(kwargs)
if kwargs_default['boolean_offset']:
x += 100
return x
这只是一个简单的例子,没有任何其他含义。
my_function(2)
将返回2
。 my_function(2, boolean_offset=True)
将返回102
。
关键是我有一个名为boolean_offset
的变量,默认情况下已关闭,但可由用户启用。
在我的实际问题中,我有一个包含许多输入变量的函数。通常不会使用所有这些输入变量,并且在大多数情况下用户希望使用默认设置。为了使代码更具可读性,我想使用*args
和**kwargs
。此外,我希望可能使用的变量具有默认值,可以由用户覆盖。
我的示例中的代码是最好的方法吗?
答案 0 :(得分:3)
如果你有很多参数,你应该拆分功能或添加一个配置类,也可以利用它来进行健全性检查。
答案 1 :(得分:1)
你可以使用** kwargs或* args。如果你想使用** Kwargs,我会在声明中添加boolean_offset的默认值,如下所示:
def my_function(x, boolean_offset = False, **kwargs)
我将使用** kwargs传递更多没有默认值的参数。
答案 2 :(得分:0)
虽然我同意使用* args / ** kwargs是不可行的事实,如果你仍然希望围绕这些行做某些事情,你可以定义一个默认的dict并使用它。
类似的东西:
from collections import defaultdict
def my_function(x, **kwargs):
my_default_dict = defaultdict(lambda : False)
for key in kwargs.keys():
my_default_dict[key] = kwargs[key]
这假设您希望所有默认值都是特定值(在这种情况下为false) - 然后您可以使用my_default_dict。 在任何其他情况下,您将不得不手动完成(进一步加强我上面的答案)。