为什么解包结构会产生元组?

2024-05-15 22:06:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

>>> y
(1,)

Tags: 整数结构structpack元组x00x01str
2条回答

请先看医生struct doc

struct.pack(fmt, v1, v2, ...)

Return a string containing the values v1, v2, ... packed according to the given format. The arguments must match the values required by the format exactly.

--

struct.unpack(fmt, string)

Unpack the string (presumably packed by pack(fmt, ...)) according to the given format. The result is a tuple even if it contains exactly one item. The string must contain exactly the amount of data required by the format (len(string) must equal calcsize(fmt)).

因为struct.pack被定义为struct.pack(fmt, v1, v2, ...)。 它接受一个非关键字参数列表(v1, v2, ...,又名*args), 所以struct.unpack需要返回一个类似列表的对象,这就是tuple的原因。

如果你认为背包是

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)

考虑一个使用C语言编写的加载二进制数据的用例。如果二进制数据是使用结构或单个整数编写的,Python将无法区分。所以,我认为,逻辑上总是返回tuple是有意义的,因为struct pack和unpack在Python值和C结构之间执行转换。

相关问题 更多 >