实验环境:
[root@localhost ~]# python -V Python 2.7.5
1.序列解包
多个赋值操作可以同时进行
>>> x,y,z = 1,2,3 >>> x 1 >>> print y,z 2 3
交换两个或者多个变量也是可以的
>>> x,y = y,x >>> print x,y,z 2 1 3
这里所做的事叫做序列解包或者递归解包--将多个值的序列解开,然后放到变量的序列中。更形象的表示:
>>> values = 1,2,3 >>> values (1, 2, 3) >>> x,y,z = values >>> print x,y,z 1 2 3
当函数或者方法返回元组(或者其他序列或者可迭代对象)时,这个特性显得更为有用。假设需要获取(和删除)字典中任意的键-值对,可以使用popitem方法,这个方法将键-值对作为元组返回。那么这个元组就可以直接赋值到两个变量中。
>>> addresslist = {'Wang':'123456','Ni':'23456'} >>> key,value = addresslist.popitem() >>> key 'Ni' >>> value '23456'
序列解包允许函数返回一个以上的值并且打包成元组,然后通过一个赋值语句很容易进行访问。所以解包的序列中的元素数量必须和放置在赋值符号=左边的变量数量完全一致。否则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
2.链式赋值
链式赋值是将同一个赋值给多个变量的捷径。有点像上面的并行赋值,不过只处理一个值
>>> x=y=[1,2,3] >>> print x,y [1, 2, 3] [1, 2, 3]
等价于
y=[1,2,3]
x=y
3.增量赋值
将赋值表达式中x=x+1的表达式运算符(本例中是+)放置在赋值运算符=的左边,写成x+=1。这种写法叫做增量赋值,对于*、/、%等标准运算符都适用。
>>> x=2 >>> x+=1 >>> x 3 >>> x*=2 >>> x 6
对于其他数据类型也同样适应。只要二元运算符本身适用这些数据类型即可。
>>> fnord='foo' >>> fnord+='bar' >>> fnord 'foobar' >>> fnord*=2 >>> fnord 'foobarfoobar'
增量赋值可以让代码变得更加紧凑和简练。
参考:
Python基础教程(第二版.修订版)