1 # coding = utf-8 2 3 a, b = 1, 2 4 print 'before change' 5 print a, b 6 7 a, b = b, a 8 print 'after change' 9 print a, b 10 11 #>>> 12 #before change 13 #1 2 14 #after change 15 #2 1
理解第7行a, b = b, a是关键。
再看看下面的代码,过渡到c = b, a:
1 a = 1 2 b =2 3 c= b 4 print c 5 #2 c = b c指向了一个整数 6 7 c = b, 8 print c 9 #(2,) c = b, c指向了一个元组 10 11 c = b, a 12 print c 13 #(2, 1) c = b ,a c指向了一个元组
原来,赋值号右边的b, a 组成了元组。在看看如何定义一个元组,就会发现b, a 就是用逗号作为分割建立了一个元组,这个过程叫做打包。 它和c = (b, a)都是同样定义了一个元组。可见,()在定义元组的时候并非是必须的。
既然有打包,就有解包。看看下面的代码:
1 a, b, c = 1, 2 ,3 2 3 d = a, b, c 4 print d 5 #(1, 2, 3) 将a,b,c所指的值打包成一个元组,赋给d 6 7 e, f ,g = d #将多个变量用逗号隔开并赋予等号右边元组d中相应位置的值 8 print e 9 #1 10 print f 11 #2 12 print g 13 #3
上面第七行,将多个变量用逗号隔开并赋予等号最右边元组d中相应位置的值,这个过程叫做解包。
所以a, b = b, a 就可以理解成打包和解包的两个过程,即 c= (b , a); a, b = c 。
用打包和解包,可以实现 不用临时变量来交换数据。