我有一个项目,其中包含很多 protobuf 消息,其中一些 protobuf 甚至还包含其他消息,其中也包含很多参数。
因为涉及的参数太多,几乎我编写的每个函数都使用 **kwargs 而不是必需/可选参数,所以我的函数通常如下所示:
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 中的 key ,或者这是我的最佳解决方案?我知道我可以使用链式 if,但我想知道是否有更简单或更 Pythonic 的东西。
除了 bool 值之外,这两个键都没有相同的值。我已经使用any()
函数可以让我免于编写这些部分的代码。
最佳答案
data.maxPrice = kwargs.get('maxPrice', 15.54)
关于python - 检查 **kwargs 中的值的更简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41105920/