Python struct.pack()用于列表中的各个元素?

use*_*547 13 python struct udp list pack

我想将列表中的所有数据打包到单个缓冲区中以通过UDP套接字发送.列表相对较长,因此索引列表中的每个元素都很繁琐.这是我到目前为止:

NumElements = len(data)
buf = struct.pack('d'*NumElements,data[0],data[1],data[2],data[3],data[4])
Run Code Online (Sandbox Code Playgroud)

但我想做一些pythonic,如果我在列表中添加更多元素,则不需要更改调用...类似于:

NumElements = len(data)
buf = struct.pack('d'*NumElements,data)  # Returns error
Run Code Online (Sandbox Code Playgroud)

这样做有好办法吗?

aba*_*ert 15

是的,您可以使用*args调用语法.

而不是这个:

buf = struct.pack('d'*NumElements,data)  # Returns error
Run Code Online (Sandbox Code Playgroud)

… 做这个:

buf = struct.pack('d'*NumElements, *data) # Works
Run Code Online (Sandbox Code Playgroud)

请参阅教程中的解压缩参数列表.(但实际上,请阅读4.7节的全部内容,而不仅仅是4.7.4节,或者您不会知道"反向情况......"指的是......)简要说明:

...当参数已经在列表或元组中但需要为需要单独位置参数的函数调用解包时...用*-operator编写函数调用以从列表或元组中解压缩参数...

  • `'d'* NumElements`不是一个很好的实践,它最终可能会产生一个非常大的字符串,而只需要浪费时间解析,然后才能释放。而是直接在字符串中包含数字:`buf = struct.pack(“ {0:d} d” .format(NumElements),* data)` (2认同)