我想了解结构如何工作?
我有两个困惑:
struct与*和**或* args和** kwargs有什么不同?我应该在哪里使用struct,我应该在哪里使用*和**?
我的代码是:
list(b'stackoverflow')
[115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119]
第二个疑问是假设有人发给我这个代码:
[115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119]
我必须在解压缩后阅读它,所以一般的方式是:
>>> struct.pack(b'bbbbbbbbbbbbb',115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119)
但我想我的判决太长了,我不想添加许多" bbbbbb"作为参数,我如何使用自动检测句子长度的东西?
之类的东西struct.pack(b'*magic',115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119)
我们能做到吗?
答案 0 :(得分:1)
struct
模块与参数传递无关,所以我无法猜测你在第一部分中提出的问题。
关于第二个问题,您不应该为此目的使用struct
。你想要的是一个bytes
对象,对应于小整数列表,这很容易得到:
>>> somelist = [115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119]
>>> bytes(somelist)
b'stackoverflow'
如果由于某种原因您决定使用struct.pack
代替此目的,那么这是最简单的方法:
>>> struct.pack("b" * len(somelist), *somelist)
b'stackoverflow'