最佳练习默认函数参数python

Best practice default function parameters python

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

假设我有一个函数:

1
2
3
4
5
6
7
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。此外,我希望潜在使用的变量具有默认值,用户可以覆盖这些值。

我的示例中的代码是实现这一点的最佳方法吗?


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

如果您有许多参数,您应该拆分函数或添加一个配置类,这也可以用来进行健全性检查。


您可以使用**kwargs或*args。如果要使用**Kwargs,我将在声明中添加布尔值偏移量的默认值,如下所示:

1
def my_function(x, boolean_offset = False, **kwargs)

我将使用**Kwargs传递更多没有默认值的参数。


虽然我同意这样一个事实,即使用*args/**kwargs并不是一种可行的方法,但是如果您仍然希望围绕这些行做一些事情,您可以定义一个默认的dict并使用它。

像这样:

1
2
3
4
5
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),然后您可以使用我的默认值。在任何其他情况下,你都必须手动完成(进一步加强我上面的答案)。