i",1) >>> str(x) '\x00\x-6ren">
gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:36:32 26 4
gpt4 key购买 nike

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

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

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

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

>>> y
(1,)

最佳答案

请先看文档struct doc

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

Return a string containing the valuesv1, v2, ... packed according to the given format. The arguments mustmatch the values required by the format exactly.

--

struct.unpack(fmt, string)

Unpack the string (presumably packed bypack(fmt, ...)) according to the given format. The result is a tupleeven if it contains exactly one item. The string must contain exactlythe amount of data required by the format (len(string) must equalcalcsize(fmt)).

因为 struct.pack 定义为 struct.pack(fmt, v1, v2, ...)。它接受一个非关键字参数列表(v1, v2, ..., aka *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)

关于python - 为什么解包结构会产生元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38297929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com