默认参数设置为空dict充当NoneType

时间:2019-12-02 08:05:11

标签: python dictionary

我有一个功能,可以按优先级更新4个词典。 在测试时,我发现在某些情况下不会全部提供4个。

该功能当然会失败,因为我试图在update上使用NoneType

@staticmethod
def create_configuration(layer1, layer2, layer3, layer4):
    configuration = {}
    configuration.update(layer4)
    configuration.update(layer3)
    configuration.update(layer2)
    configuration.update(layer1)
    return configuration

我试图将函数签名中的参数设置为 layer3={}layer3=dict(),但是在两种方式下,当我运行它时,字典都是NoneType

是否有一种更优雅的方法来实现此功能,而不是循环遍历变量并将它们设置为空的dict(如果它们为NoneType)?

1 个答案:

答案 0 :(得分:1)

许多选项。

默认参数不执行任何操作的原因是,实际上您确实为这些参数提供了一个参数,恰好是None。因此默认设置为未使用。

一个选项,修复调用此函数的代码。如果此函数需要四个字典,并且得到None而不是dict,则那一方是错误的。

但是在此代码中需要四个字典没有什么特别的。相反,它可以是:

def combines_dicts(*dicts):
    combined = {}
    for d in dicts:
        combined.update(d)
    return combined

现在调用代码可以提供两个或五个参数,如果它有那么多命令。

您还可以使用if对其进行修复:

if layer4:
    configuration.update(layer4)

等等。