关于python:更简单的方法来检查** kwargs中的值

Easier way to check values in **kwargs

本问题已经有最佳答案,请猛点这里访问。

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

因为涉及的参数太多,所以我编写的几乎每个函数都使用**kwargs而不是必需/可选参数,所以我的函数通常如下所示:

1
2
3
4
5
6
7
8
9
10
11
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)

编写器只是一个小库,它使用createMessage函数将packetheader数据附加到消息中,而serializeMessage只调用serializeToString方法,并返回元组。

我使用这个方法创建一个数据听写,然后将其传递给**Kwargs。我的代码可以工作,目前我还可以,但当我必须为每个函数编写50个这样的检查时,这很乏味。

所以问题是,除了这个,是否还有其他方法可以检查**关卡中的密钥,或者这是我最好的解决方案?我知道我可以用链状的if's,但我想知道是否有更简单或更多的Python。

感谢您的任何建议。

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


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