Tôi muốn đóng gói tất cả dữ liệu trong một danh sách vào một bộ đệm đơn để gửi qua một ổ cắm UDP. Danh sách tương đối dài, vì vậy việc lập chỉ mục từng phần tử trong danh sách là tẻ nhạt. Đây là những gì tôi có cho đến nay:Python struct.pack() cho từng phần tử trong danh sách?
NumElements = len(data)
buf = struct.pack('d'*NumElements,data[0],data[1],data[2],data[3],data[4])
Nhưng tôi muốn làm một cái gì đó hơn pythonic mà không yêu cầu tôi thay đổi cuộc gọi nếu tôi thêm nhiều yếu tố vào danh sách ... cái gì đó như:
NumElements = len(data)
buf = struct.pack('d'*NumElements,data) # Returns error
Có cách nào tốt để làm điều này không ??
Ah đó chỉ là những gì tôi cần! Cảm ơn bạn! – user1636547
''d' * NumElements' không phải là thực hành rất tốt, nó có thể kết thúc làm cho một chuỗi rất lớn, chỉ phải lãng phí thời gian phân tích cú pháp, chỉ để miễn phí sau đó. Thay vào đó bao gồm số trực tiếp trong chuỗi: 'buf = struct.pack (" {0: d} d ".format (NumElements), * dữ liệu)' – ideasman42
@ ideasman42: Điểm tốt. Nhưng với một số lượng lớn các giá trị, việc giải nén chúng thành 500000 đối số có thể là một vấn đề khi chuyển 'd' * 500000, vì vậy bạn có thể muốn kiểm tra điều đó với 'b ''. Join (struct.pack ('d') , elem) cho elem trong dữ liệu) ', hoặc xem xét sử dụng một cái gì đó như' mảng' hoặc 'ctypes' thay vì' struct'. – abarnert