在 **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)
我有一个包含大量 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)