1 #交換兩個變量值,不用中間變量,至少兩種方案
2 #常規 借助中間變量
3 a='789'
4 b='na'
5 temp=a 6 a=b 7 b=temp 8 # print(a,b)
9
10 #姿勢一 列表生成式
11 a=123
12 b='name'
13 a,b=b,a 14 #a,b=a,b 跟'a=b b=a'有什么區別?
15 #詳細講解參照:https://www.jianshu.com/p/014599ab2c10
16
17 #姿勢二 加減法
18 #如果是數字 可以這樣交換,如果字符串怎么搞?
19 a=10
20 b=20
21 a=a+b 22 b=a-b 23 a=a-b 24 print(a,b) 25
26 #姿勢三 字符串切片
27 #如果是字符串 可以這樣交換,采用切片,ww_lst[0:3] #ww_lst[:3] 效果是一樣的,切片N:M,不包含M 當N為起始值可以省略
28 a='what'
29 b='your name'
30 a=a+b 31 a,b=a[len(a)-len(b):],a[:len(a)-len(b)] 32 print(a) 33 print(b)
=============================
那么,在x, y = y, x
的背后都發生了些什么呢?
一般情況下Python語句是從左到右解析一個語句的,但在賦值操作的時候,因為是右值具有更高的計算優先級,所以需要從右向左解析。
對於x, y = y, x
,它的執行順序如下:
- 先計算右值
y , x
(這里是簡單的原值,但可能會有表達式或者函數調用的計算過程), 在內存中創建元組(tuple),存儲y, x
分別對應的值; - 計算左邊的標識符,元組被分別分配給左值,通過解包(unpacking),元組中第一個標示符對應的值(y),分配給左邊第一個標示符(x),元組中第二個標示符對應的值(x),分配給左邊第二個標示符(y),完成了
x
和y
的值交換。
需要注意的是當左右值和標識符的數量不等時會出現ValueError
:
>>> x, y = 1, 2 >>> x, z = y, x, 3 ValueError: too many values to unpack >>> y, x , a= x, y ValueError: need more than 2 values to unpack
而當左值只有一個變量的時候,默認將右值打包(pack)成一個元組(tuple)傳給右值。
>>> x = 1, 2 >>> x (1, 2)
來源:簡書
====================
''' 這里賦值之前,先計算右邊的值,所以賦值前a=1,b=2 ,計算完后a,b=(2,1+2) 所以a=2 b=3 >>> a,b=1,2 >>> t=(b,a+b) >>> t[0] 2 >>> t[1] 3 >>> a,b=(b,a+b) >>> a 2 >>> b 3 '''