仅将现有参数传递给方法

时间:2017-11-27 10:06:57

标签: python properties

我有一个代码,如果属性文件中存在此变量,则将变量传递给方法。

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

1 个答案:

答案 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)})