为什么解压缩结果会产生元组?

时间:2016-07-11 01:20:35

标签: python pack unpack

在Python结构中打包整数后,解包会产生一个元组,即使它只包含一个项目。为什么拆包会返回一个元组?

>>> x = struct.pack(">i",1)

>>> str(x)
'\x00\x00\x00\x01'

>>> y = struct.unpack(">i",x)

>>> y
(1,)

2 个答案:

答案 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结构之间执行转换。