반복 필드에 할당하는 방법은 무엇입니까?
나는 파이썬에서 프로토콜 버퍼를 사용하고 있고 나는Person
메세지
repeated uint64 id
하지만 다음과 같이 값을 할당하려고 할 때:
person.id = [1, 32, 43432]
오류가 발생합니다.Assigment not allowed for repeated field "id" in protocol message object
반복 필드에 값을 할당하는 방법은 무엇입니까?
설명서에 따르면 반복 필드에 직접 할당할 수 없습니다.이 경우에는 다음과 같이 전화할 수 있습니다.extend
목록의 모든 요소를 필드에 추가합니다.
person.id.extend([1, 32, 43432])
확장하지 않고 완전히 덮어쓰려는 경우 다음 작업을 수행할 수 있습니다.
person.id[:] = [1, 32, 43432]
이 접근 방식은 현장을 완전히 정리하는 데도 효과적입니다.
del person.id[:]
반복되는 복합 유형의 경우 이것이 저에게 효과가 있었습니다.
del person.things[:]
person.things.extend([thing1, thing2, ..])
이 의견에서 발췌한 반복 필드에 할당하는 방법은 무엇입니까?반복 필드에 할당하는 방법은 무엇입니까?
반복적인 현장 작업에 대한 기본적인 예시를 얻기 위해 많은 잠을 설친 후, 저는 마침내 그것을 얻었습니다.
문제:
- 제곱과 승수의 두 가지 함수로 calculator.py 을 만듭니다.
- GRPC를 사용하여 동일한 프로토콜 파일을 만듭니다.
- 서버, 클라이언트를 작성합니다.
- 서버를 실행하고 클라이언트를 실행하여 올바른 결과를 얻습니다.
프로토 파일:
syntax = "proto3";
message Number {
int32 value = 1;
}
message NumList {
string name = 1;
repeated Number nums = 2;
}
service Calculator {
rpc Multiplier(NumList) returns (Number) {}
rpc Square(Number) returns (Number) {}
}
이제 사각형 부분은 쉽지만, 곱셈기의 경우, 저는 (프로토파일에 정의된 번호 유형에서와 같이) 숫자 목록을 전달하고 싶었습니다.
반복되는 필드에 문제가 있었습니다.간단히 말해서 여기 궁극적인 해결책이 있습니다.
해결책:
import grpc
# import the generated classes
import calculator_pb2
import calculator_pb2_grpc
# open a gRPC channel
channel = grpc.insecure_channel('localhost:50051')
# create a stub (client)
stub = calculator_pb2_grpc.CalculatorStub(channel)
num_list = calculator_pb2.NumList()
num_list.name = 'MyFirstList'
n1 = num_list.nums.add()
n2 = num_list.nums.add()
n3 = num_list.nums.add()
n1.value = 10
n2.value = 20
n3.value = 30
assert len(num_list.nums) == 3
response = stub.Multiplier(num_list)
print(response.value)
계산기 승수 기능(표시해야 하므로):
def multiplier(numlist, name):
mul = 1
for num in numlist:
mul = mul * num.value
print(f'Result of list {name}')
return mul
이것이 누군가에게 도움이 되기를 바랍니다.이것이 설명이 되어야 하는 만큼 설명되기를 바랍니다.
언급URL : https://stackoverflow.com/questions/23726335/how-to-assign-to-repeated-field
'programing' 카테고리의 다른 글
직접 대.위임됨 - jQuery .on() (0) | 2023.07.29 |
---|---|
nextcloud에서 관리자 사용자를 생성할 수 없음 (0) | 2023.07.29 |
C를 위한 좋은 플롯 라이브러리? (0) | 2023.07.29 |
에이잭스를 통해 어떻게 php로 배열을 보낼 수 있습니까? (0) | 2023.07.29 |
.vmx 메서드를 사용하여 쉼표 없이 배열을 문자열로 변환 (0) | 2023.07.29 |