平時時不時會面面實習生,大多數的同學在學校裡都已經掌握了python。面試的時候要求同學們實現乙個簡單的函式,交換兩個變數的值,大多數的同學給出的都是如下的答案
def swap(x, y):
tmp = x
x = y
y = tmp
實際上,python中還有更簡潔的更具python風格的實現,如下
def swap(x, y):
x, y = y, x
相比前一種方法,後一種方法節省乙個中間變數,在效能上也優於前一種方法。
我們從python的位元組碼來深入分析一下原因。
import dis
import timeit
def swap1():
x = 5
y = 6
x, y = y, x
def swap2():
x = 5
y = 6
tmp = x
x = y
y = tmp
if __name__ == "__main__":
print "***************== swap1 ***************=="
print dis.dis(swap1)
print "***************== swap2 ***************=="
print dis.dis(swap2)
dis是個反彙編工具,將python**翻譯成位元組碼指令。這裡的輸出如下
***************== swap1 ***************==
5 0 load_const 1 (5)
3 store_fast 0 (x)
6 6 load_const 2 (6)
9 store_fast 1 (y)
7 12 load_fast 1 (y)
15 load_fast 0 (x)
18 rot_two
19 store_fast 0 (x)
22 store_fast 1 (y)
25 load_const 0 (none)
28 return_value
none
***************== swap2 ***************==
10 0 load_const 1 (5)
3 store_fast 0 (x)
11 6 load_const 2 (6)
9 store_fast 1 (y)
12 12 load_fast 0 (x)
15 store_fast 2 (tmp)
13 18 load_fast 1 (y)
21 store_fast 0 (x)
14 24 load_fast 2 (tmp)
27 store_fast 1 (y)
30 load_const 0 (none)
33 return_value
none
通過位元組碼可以看到,swap1和swap2最大的區別在於,swap1中通過rot_two交換棧頂的兩個元素實現x和y值的互換,swap2中引入了tmp變數,多了一次load_fast, store_fast的操作。執行乙個rot_two指令比執行乙個load_fast+store_fast的指令快,這也是為什麼swap1比swap2效能更好的原因。 python變數值 Python變數值轉變量
今天用python讀取乙個有很多欄位的配置檔案,配置檔案中的格式類似 pidstart 2600 startfid 47 starttid 450 startfirst 1 message 一般會想到的是 config open configpath,r for item in config set...
變數值的交換方法總結
變數值的交換方法總結 2008年05月09日 星期五 下午 04 47 程式設計中肯定會常常用到swap這個函式,他的意思就是交換兩個變數的數值,但是這個過程手動實現也很容易,總結了一下,大致有5種實現。主函式 main 方法一 通過臨時變數實現,也是最常見的方法 void swap int a i...
交換兩個變數值
交換兩個變數的值 引入第三方變數 int x 5,y 3 int temp 0 temp x x y y temp system.out.println x x t y y 引入第三方變數是很容易解決的!不引入第三方變數 方法一 先求和,然後在從和裡面減掉乙個數,得到另乙個數 int a 3,b 5...