讓我們看看有問題的語句的位元組碼:
>>> def f(a):
... a[0], a[a[0]] = a[a[0]], a[0]
>>> dis.dis(f)
2 0 load_fast 0 (a)
3 load_fast 0 (a)
6 load_const 1 (0)
9 binary_subscr
10 binary_subscr
11 load_fast 0 (a)
14 load_const 1 (0)
17 binary_subscr
18 rot_two
19 load_fast 0 (a)
22 load_const 1 (0)
25 store_subscr
26 load_fast 0 (a)
29 load_fast 0 (a)
32 load_const 1 (0)
35 binary_subscr
36 store_subscr
37 load_const 0 (none)
40 return_value
這樣工作如下:
>指令0-10在值堆疊上按a [a [0]],因此為2
>指令11-17在值堆疊上按a [0],現在為2,1
>指令18交換它們,堆疊為1,2
>指令19-25將最高值(2)分配給a [0],將值堆疊保留為1
>指令26-36嘗試為a [a [0]]賦值,但a [0]現在為2,所以它試圖分配給a [2],這是乙個indexerror.
簡而言之,問題是在分配給a [0]之後才評估左側的a [a [0]].
作為修復,我建議:
a0 = a[0]
a[0], a[a0] = a[a0], a[0]
python同步賦值交換 python交換和賦值
通常,我們使用a i a j a j a i 來交換.這有時可能無效.例如,a 1,2 a 0 a a 0 a a 0 a 0 將失敗.為什麼會失敗以及如何解釋賦值?解決方法 讓我們看看有問題的語句的位元組碼 def f a a 0 a a 0 a a 0 a 0 dis.dis f 2 0 loa...
字串賦值,查詢,交換
00401000 ba 90204000 mov edx,00402090 源位址 0040100e b9 01000000 mov ecx,0x1 迴圈次數為1 00401013 f3 a4 rep movs byte ptr es edi byte ptr esi 位元組為單位傳遞 004010...
python怎麼給x賦值 Python賦值魔法技巧
實驗環境 root localhost python v python 2.7.5 1.序列解包 多個賦值操作可以同時進行 x,y,z 1,2,3 x print y,z 2 3交換兩個或者多個變數也是可以的 x,y y,x print x,y,z 2 1 3 這裡所做的事叫做序列解包或者遞迴解包 ...