在Python结构中打包整数后,解包会产生一个元组,即使它只包含一个项目。为什么拆包会返回一个元组?
>>> x = struct.pack(">i",1)
>>> str(x)
'\x00\x00\x00\x01'
>>> y = struct.unpack(">i",x)
>>> y
(1,)
答案 0 :(得分:8)
请先查看文档struct doc
struct.pack(fmt,v1,v2,...)
返回包含值的字符串 v1,v2,...按照给定的格式打包。争论必须 完全匹配格式所需的值。
-
struct.unpack(fmt,string)
打开绳子包装(大概是打包的 pack(fmt,...))根据给定的格式。结果是一个元组 即使它只包含一个项目。字符串必须完全包含 格式所需的数据量(len(字符串)必须相等 calcsize(FMT))。
因为struct.pack
定义为struct.pack(fmt, v1, v2, ...)
。
它接受一个非keyworded参数列表(v1, v2, ...
,又名*args
),
所以struct.unpack
需要返回一个像对象一样的列表,这就是元组的原因。
如果您将pack视为
,那将很容易理解x = struct.pack(fmt, *args)
args = struct.unpack(fmt, x) # return *args
示例:
>>> x = struct.pack(">i", 1)
>>> struct.unpack(">i", x)
(1,)
>>> x = struct.pack(">iii", 1, 2, 3)
>>> struct.unpack(">iii", x)
(1, 2, 3)
答案 1 :(得分:1)
考虑一个用于加载使用C语言编写的二进制数据的用例。如果二进制数据是使用结构或使用单个整数编写的,Python无法区分。所以,我认为,逻辑上总是返回元组是有意义的,因为struct pack和unpack在Python值和C结构之间执行转换。