2011-12-21 42 views
17

簡單和短的問題。在Python中交換兩個變量非常簡單:a, b = b, a。沒關係,我沒有異議:)但我感興趣的是它如何在內部工作?它自己創造了一些臨時變量還是更有趣(我敢打賭)?變量交換如何在內部工作?

回答

31

Python源代碼在執行前轉換爲bytecode。你可以看到掉在內部是如何工作的,通過使用反彙編dis看到字節碼是什麼樣子:

import dis 
>>> def f(a,b): a, b = b, a 
>>> dis.dis(f) 
    1   0 LOAD_FAST    1 (b) 
       3 LOAD_FAST    0 (a) 
       6 ROT_TWO    
       7 STORE_FAST    0 (a) 
      10 STORE_FAST    1 (b) 
      13 LOAD_CONST    0 (None) 
      16 RETURN_VALUE 

簡單來說,它推動在堆棧上的a和b的值,旋轉(掉期)的頂部兩個元素,然後再次彈出這些值。

參見:

+0

真棒!所以技巧是ROT_TWO ...非常感謝! – 2011-12-21 09:05:52