Python交換變數值

2021-09-28 06:35:34 字數 2140 閱讀 7809

平時時不時會面面實習生,大多數的同學在學校裡都已經掌握了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...