python變數交換效能最佳化,python變數效能最佳化
從多方面新講python效能最佳化看到交換兩個變數的值可以使用
a,b = b,a
這樣可以提高效能
>>> from timeit import Timer>>> Timer("t=a;a=b;b=t","a=1;b=2").timeit()0.06279781319366587>>> Timer("a,b=b,a","a=1;b=2").timeit()0.0378979925538232>>>
從已耗用時間上看,確實節省了快一半的時間
通過dis得到python位元組碼
>>> def func():... a,b = b,a...>>> import dis>>> dis.dis(func) 2 0 LOAD_FAST 0 (b) 3 LOAD_FAST 1 (a) 6 ROT_TWO 7 STORE_FAST 1 (a) 10 STORE_FAST 0 (b) 13 LOAD_CONST 0 (None) 16 RETURN_VALUE>>>
可以看出主要是ROT_TWO指令的功勞:
查閱python文檔可以知道有ROT_TWO ROT_THREE ROT_FOUR這樣的指令,可以直接交換兩個變數、三個變數、四個變數的值
在python3.4的源碼中查閱ceval.c檔案可以看到:
TARGET(ROT_TWO) { PyObject *top = TOP(); PyObject *second = SECOND(); SET_TOP(second); SET_SECOND(top); FAST_DISPATCH(); } TARGET(ROT_THREE) { PyObject *top = TOP(); PyObject *second = SECOND(); PyObject *third = THIRD(); SET_TOP(second); SET_SECOND(third); SET_THIRD(top); FAST_DISPATCH(); }就是這些指令的具體C語言實現了
歸根究底,速度快還是因為a,b = b,a的方式全部是使用指標操作
python變數類型錯誤
看來你用的是python 3.x版本,input函數返回的是字串,執行強制類型轉換就行了
guess = int(input("What's yer guess?"))
運行這些python 2的例子,最好還是下載python 2.x,否則還會有很多不相容的地方
Python 直接觀察變數數值
Portable Python(portablepython.com)可以滿足你的要求。這個IDE裡整合了pyscripter這個包,具備你所說的功能。不需在Debug模式就可以查看變數。位於:code.google.com/p/pyscripter/wiki/Screenshots