在Python中将值解包到多个变量中
下面的代码可以正常运行。不过我无法重新创建它,也不太理解。能不能请大家帮忙把所有的代码行写完整呢?
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)
的意思是让 unpack
把 value
当作一个包含一个无符号字符的二进制字符串来处理(用 '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