在Python中将值解包到多个变量中

1 投票
4 回答
5404 浏览
提问于 2025-04-18 10:46

下面的代码可以正常运行。不过我无法重新创建它,也不太理解。能不能请大家帮忙把所有的代码行写完整呢?

value = #something
var1, var2 =  unpack("b8s",value)

这意味着这里有一个值被放进了两个变量里。有人能举个例子,说明这是怎么做到的吗?非常感谢!

4 个回答

0

发生的事情是:unpack 会处理 elem 的内容,并返回一个包含两个项目的元组。每个项目会被分配给不同的变量。

这其实是一样的:

unpacked_value =  unpack("b8s",elem)
var1 = unpacked_value[0]
var2 = unpacked_value[1]

使用不同的值和变量:

my_tuple = (1, 2)
var1, var2 = my_tuple
print var1 #outputs 1
print var2 #outputs 2
0

如果你有一个元组,比如:

t = (1, 2, "a")

你可以这样把它拆开:

a, b, c = t
print "a=", a

这样会输出:

a= 1

5

你这样做太复杂了,其实根本不需要用循环。

var1, var2 = tuple

这只是Python中的一种语法特性。注意,你必须把整个元组(tuple)拆开;左边的变量数量必须和元组里的值数量相等。


举个例子

myTuple = ("hi","i","am","tuple")
first,second,third,fourth = myTuple
print first
>>hi
print second
>>i
print third
>>am
print fourth
>>tuple

不允许这样做

myTuple = ("hi","i","am","tuple")
first,second = myTuple
>>Exception
2

unpack 方法来自于 struct 模块,这个模块可以让你把 Python 字符串当作打包的二进制数据来处理。调用 unpack('b8s', value) 的意思是让 unpackvalue 当作一个包含一个无符号字符的二进制字符串来处理(用 'b' 表示),这个字符会被解包成它的整数值,后面跟着一个长度为 8 的字符数组(用 '8s' 表示),也就是说这是一个长度为 8 的字符字符串。最后,这些内容会被解包成一个 Python 字符串。所以一个完整的例子看起来会是这样的:

>>> from struct import unpack
>>> s = "abcdefgty"
>>> int_char, my_str = unpack("b8s", s)
>>> print int_char
97  # 97 is the ascii code of 'a'
>>> print my_str
bcdefgty

撰写回答