在 **kwargs 中检查值的更简单方法

Easier way to check values in **kwargs

我有一个包含大量 protobuf 消息的项目,其中一些 protobuf 甚至包含其他消息,这些消息中也有很多参数。

因为涉及的参数太多,几乎我写的每个函数都使用**kwargs而不是required/optional参数,所以我的函数通常是这样的:

def set_multiple_params(**kwargs):
    header, smp_message = Writer.createMessage(SetMultipleParametersRequestMessage_pb2.SetMultipleParametersRequestMessage,
                                               TIMESTAMP)
    data = smp_message.multipleParametersData
    data.maxPrice = kwargs['maxPrice'] if 'maxPrice' in kwargs else 15.54
    data.minPrice = kwargs['minPrice'] if 'minPrice' in kwargs else 1.57
    ....

    # list goes here with around 30 more checks like this, and finally

    return Writer.serializeMessage(header, smp_message)

Writer 只是一个使用 createMessage 函数将 PacketHeader 数据附加到消息中的小型库,而 serializeMessage 只是调用 serializeToString 方法,而 returns元组。

我以创建数据字典的方式使用它,然后将其传递给 **kwargs。 我的代码可以工作,现在对我来说没问题,但是当我必须为每个函数编写 50 个这样的检查时,这很乏味。

所以问题是除此之外是否还有其他方法可以检查 **kwargs 中的密钥,或者这是我最好的解决方案?我知道我可以使用链式 if,但我想知道是否有更简单或更 Pythonic 的东西。

如有任何建议,我们将不胜感激。

p/s:除布尔值外,这两个键都没有相同的值。我已经使用 any() 函数来避免编写这些代码部分。

data.maxPrice = kwargs.get('maxPrice', 15.54)