更容易检查** kwargs中的值

时间:2016-12-12 17:06:43

标签: python kwargs protocol-buffers

我有一个包含很多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方法,并返回元组。

我在创建数据字典的方式中使用它,我将其传递给** kwargs。 我的代码有效,现在对我来说还不错,但是当我必须为每个函数编写50个这样的支票时,它很乏味。

所以问题是,除了这个以外,还有其他方法来检查** kwargs中的密钥,还是这是我最好的解决方案?我知道我可以使用链式,但我想知道是否有更容易或更多的Pythonic。

任何建议表示赞赏。

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

1 个答案:

答案 0 :(得分:2)

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