只将现有参数传递到方法

2024-03-02 19:36:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个代码,如果这个变量存在于属性文件中,它会将这个变量传递到一个方法中

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

必须传递超过2个的p.S.参数


Tags: 文件方法代码name参数getreturn属性
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)})

看看star expressions

请尝试以下操作:

reader.get_smth(**properties)

这将把字典中的键值对解压成函数的参数

属性名必须与参数名相同(在您的程序中,属性似乎是大写的,参数是小写的)

相关问题 更多 >