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