programing

반복 필드에 할당하는 방법은 무엇입니까?

css3 2023. 7. 29. 08:48

반복 필드에 할당하는 방법은 무엇입니까?

나는 파이썬에서 프로토콜 버퍼를 사용하고 있고 나는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