我有一个功能,可以按优先级更新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
)?
答案 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)
等等。