最佳实践默认函数参数python

时间:2018-03-26 10:59:49

标签: python function kwargs

我想知道关于函数默认值的最佳实践。

我们说我有一个功能:

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)将返回2my_function(2, boolean_offset=True)将返回102

关键是我有一个名为boolean_offset的变量,默认情况下已关闭,但可由用户启用。

在我的实际问题中,我有一个包含许多输入变量的函数。通常不会使用所有这些输入变量,并且在大多数情况下用户希望使用默认设置。为了使代码更具可读性,我想使用*args**kwargs。此外,我希望可能使用的变量具有默认值,可以由用户覆盖。

我的示例中的代码是最好的方法吗?

3 个答案:

答案 0 :(得分:3)

* args和** kwargs不会使代码更具可读性,相反,它们是纯粹的地狱。 之前,您的编辑器可以向您显示函数参数,现在只有** kwargs - 并且没有可靠的方法来查找可以或必须设置哪些参数。

如果你有很多参数,你应该拆分功能或添加一个配置类,也可以利用它来进行健全性检查。

答案 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。 在任何其他情况下,您将不得不手动完成(进一步加强我上面的答案)。