我有一个代码,如果属性文件中存在此变量,则将变量传递给方法。
if all(hasattr(globals().get('properties'), var) for var in ['NAME','VALUE']):
return reader.get_smth(name=properties.NAME, value=properties.VALUE)
else:
return reader.get_smth()
很明显,方法get_smth()
具有每个传递参数的默认值。
那么我怎样才能只传递现有参数(reader.get_smth(name=properties.NAME)
或reader.get_smth(value=properties.VALUE)
)以避免大量elif
P.S。必须传递的参数多于2 。
答案 0 :(得分:2)
您可以在此处使用命名关键字**kwargs
。首先,我们构造一个字典,将get_smth
函数的参数名称(例如name
)映射到properties
的名称(例如NAME
):
prop_dict = {'name': 'NAME', 'value': 'VALUE'}
接下来我们可以使用以下方法:
reader.get_smth(**{k: getattr(properties, v)
for k,v in prop_dict.items()
if hasattr(properties, v)})