Python 变量交换

 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

用打包和解包,可以实现 不用临时变量来交换数据。

原文地址:https://www.cnblogs.com/haoshine/p/5117433.html