全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
3251 0
2016-04-04

序列解包是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 "<stdin>", line 1, in <module>

ValueError: need more than 2 values to unpack>>> x, y, z = 1, 2, 3, 4

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ValueError: too many values to unpack

注:Python3.0中有另外一个解包的特性:可以像在函数的参数列表中一样使用星号运算符(参见第六章)。例如,a, b, *rest = [1, 2, 3, 4]最终会在a和b都被赋值之后将所有的其他的参数都收集到rest中。本例中,rest的结果将会是[3, 4]。使用星号的变量也可以放在第一个位置,这样它就总会包含一个列表。右侧的赋值语句可以是可迭代对象。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群