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

Jed*_*edi 7 python unpack pack

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

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

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

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

>>> y
(1,)
Run Code Online (Sandbox Code Playgroud)

Mit*_*ril 8

请参阅doc first 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, ...,aka *args),所以struct.unpack需要返回一个像对象一样的列表,这就是为什么元组.

如果你认为打包是很容易理解的

x = struct.pack(fmt, *args)
args = struct.unpack(fmt, x)  # return *args
Run Code Online (Sandbox Code Playgroud)

例:

>>> x = struct.pack(">i", 1)
>>> struct.unpack(">i", x)
(1,)
>>> x = struct.pack(">iii", 1, 2, 3)
>>> struct.unpack(">iii", x)
(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)