看看内部的操作是怎么样的>>> def fn():
i,j = 1,2
i,j = j,i
>>> import dis
>>> dis.dis(fn)
2 0 LOAD_CONST 3 ((1, 2)) # 元组序列 压入 栈顶
3 UNPACK_SEQUENCE 2 # 分拆 栈顶的序列,然后从右到左依次压入栈顶
6 STORE_FAST 0 (i) # i = 1
9 STORE_FAST 1 (j) # j = 2
3 12 LOAD_FAST 1 (j) # j 入栈
15 LOAD_FAST 0 (i) # i 入栈
18 ROT_TWO # 交换栈中最上面的2个值
19 STORE_FAST 0 (i) # i = j
22 STORE_FAST 1 (j) # j = i
25 LOAD_CONST 0 (None)
28 RETURN_VALUE
>>> a,b='12' # 这是个 分拆序列 的表达式。
>>> a
'1'
>>> b
'2'
>>>
i,j = 1,2 和 i,j = j,i 看着很像,内部却是2种不同的操作
i,j = 1,2 是 分拆序列
i,j = j,i 是 交换变量
|