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) |
编写器只是一个小库,它使用
我使用这个方法创建一个数据听写,然后将其传递给**Kwargs。我的代码可以工作,目前我还可以,但当我必须为每个函数编写50个这样的检查时,这很乏味。
所以问题是,除了这个,是否还有其他方法可以检查**关卡中的密钥,或者这是我最好的解决方案?我知道我可以用链状的if's,但我想知道是否有更简单或更多的Python。
感谢您的任何建议。
P/S:两个键都没有相同的值,除了布尔值。我已经使用
1 | data.maxPrice = kwargs.get('maxPrice', 15.54) |