我想将列表中的所有数据打包到单个缓冲区中以通过 UDP 套接字发送。该列表相对较长,因此为列表中的每个元素建立索引非常繁琐。这是我到目前为止所拥有的:
NumElements = len(data)
buf = struct.pack('d'*NumElements,data[0],data[1],data[2],data[3],data[4])
但我想做一些更Pythonic的事情,如果我向列表中添加更多元素,则不需要更改调用...类似:
NumElements = len(data)
buf = struct.pack('d'*NumElements,data) # Returns error
有没有好的方法可以做到这一点?
是的,您可以使用*args
调用语法。
而不是这个:
buf = struct.pack('d'*NumElements,data) # Returns error
… 做这个:
buf = struct.pack('d'*NumElements, *data) # Works
See 解压参数列表 http://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists在教程中。 (但实际上,请阅读第 4.7 节的全部内容,而不仅仅是 4.7.4,否则您将不知道“相反的情况……”指的是什么……)简单地说:
...当参数已经在列表或元组中但需要为需要单独位置参数的函数调用解包时...使用 * 运算符编写函数调用以将参数从列表或元组中解包...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)