新手求教,例如列表中有None和数字
[None, None, None, None, None, 1, 3, None, None, None, None, None]
在proto文件中如果定义
import "google/protobuf/struct.proto";
message TestResponse {
google.protobuf.ListValue result = 1;
}
在服务函数如何定义
def test(**kwargs):
result = [None, None, None, None, None, 1, 3, None, None, None, None, None]
return {"result": result}
在官网中找到这些但不知如何用
https://developers.google.com/protocol-buffers/docs/reference/python-generated#any
如果您想使用 protobuf 实现这个功能,可以将 None 值作为 NullValue 或 Option 类型的值返回,而将数字作为 Int32Value 类型的值返回。这样您就可以使用 protobuf 的 ListValue 类型包含这两种类型的值了。
以下是 proto 文件和 Python 代码的示例:
proto 文件:
import "google/protobuf/struct.proto";
import "google/protobuf/wrappers.proto";
message TestResponse {
repeated google.protobuf.Value result = 1;
}
Python 代码:
from google.protobuf import struct_pb2, wrappers_pb2
def test():
result = [None, None, None, None, None, 1, 3, None, None, None, None, None]
values = []
for value in result:
if value is None:
values.append(struct_pb2.Value(null_value=struct_pb2.NULL_VALUE))
else:
values.append(struct_pb2.Value(number_value=value))
return {"result": values}
在这个示例中,我们使用 protobuf 中的 Value 类型代替 ListValue 类型来存储结果列表。对于 None 值,我们使用 null_value 字段存储 NullValue 值;对于数字,我们使用 number_value 字段存储 Int32Value 值。最后,我们将所有值存储在一个列表中,并将其包含在 TestResponse 消息中返回