13
我想將列表中的所有數據打包到單個緩衝區中以通過UDP套接字發送。該列表相對較長,因此索引列表中的每個元素都很乏味。這是我到目前爲止有:python struct.pack()列表中的單個元素?
NumElements = len(data)
buf = struct.pack('d'*NumElements,data[0],data[1],data[2],data[3],data[4])
但是我希望做更多的東西,不需要我改變呼叫,如果我加入了更多元素添加到列表...像Python的:
NumElements = len(data)
buf = struct.pack('d'*NumElements,data) # Returns error
有沒有這樣做的好方法?
啊,那正是我需要的!謝謝! – user1636547 2013-05-04 00:26:54
''d'* NumElements'不是很好的做法,它可能會產生一個非常大的字符串,只能浪費時間解析,只能在事後釋放。而是直接在字符串中包含數字:'buf = struct.pack(「{0:d} d」.format(NumElements),* data)' – ideasman42 2015-04-28 19:38:53
@ ideasman42:好點。但是對於大量的值,將它們解包爲500000個參數可能與傳遞'd'* 500000一樣多,所以您可能需要對'b''進行測試。join(struct.pack('d' ,elem)for elem in data),或者考慮使用'array'或'ctypes'而不是'struct'。 – abarnert 2015-04-28 21:16:23