序列解包是Python编程语言(http://www.maiziedu.com/course/python-px/)中赋值语句的一种技巧方法,如果要为多个变量赋值,按照以前的方法,会操作很多次才能完成,如果使用序列解包,就只需要一个表达式就可以完成多个变量赋值操作。那么赋值语句序列解包操作方法有哪些呢,比如,多个赋值操作可以同时进行:
>>> x, y, z = 1, 2, 3
>>> print x, y, z1 2 3
# 很有用吧?用它交换两个(或更多个)变量也是没问题的:
>>> x, y = y, x>>> print x, y, z2 1 3
事实上,这里所做的事情叫做序列解包(sequence unpacking)或递归解包——将多个值的序列解开,然后放到变量的序列中。更形象一点的表示就是:
>>> values = 1, 2, 3
>>> values
(1, 2, 3)>>> x, y, z = values>>> x1
>>> y2
>>> z3
当函数或者方法返回元组(或者其他序列或可迭代对象)时,这个特性尤其有用。假设需要获取(和删除)字典中任意的键-值对,可以使用popitem方法,这个方法将键-值作为元组返回。那么这个元组就可以直接赋值到两个变量中:
>>> scoundrel = {"name": "XuHoo", "girlfriend": "None"} # =_=
>>> key, value = scoundrel.popitem()>>> key'girlfriend'
>>> value'None'
它允许函数返回一个以上的值并且打包成元组,然后通过一个赋值语句很容易进行访问。所解包的序列中的元素数量必须和放置在赋值符号=左边的变量数量完全一致,否则Python会在赋值时引发异常:
>>> x, y, z = 1, 2
Traceback (most recent call last):
File "", line 1, in
ValueError: need more than 2 values to unpack>>> x, y, z = 1, 2, 3, 4
Traceback (most recent call last):
File "", line 1, in
ValueError: too many values to unpack
注:Python3.0中有另外一个解包的特性:可以像在函数的参数列表中一样使用星号运算符(参见第六章)。例如,a, b, *rest = [1, 2, 3, 4]最终会在a和b都被赋值之后将所有的其他的参数都收集到rest中。本例中,rest的结果将会是[3, 4]。使用星号的变量也可以放在第一个位置,这样它就总会包含一个列表。右侧的赋值语句可以是可迭代对象。