平時使用python 時算數字就跟計算器差不多。
因爲他畢竟是個高級語言。
例如
134%8 #求餘數
134/8 #求商的整數部分
其實我們也可以寫
134&0x07
134>>3
這個位操作運算瞬間讓你的python代碼更快,其實乘除法也很快了。
別人可能對你的代碼要另眼相看。
爲了讓大家更直觀的看到效果我測試了一下
#coding=utf-8
import time
print '位運算'
start=time.time()
for i in xrange(1000000):
134>>3<<5&0x07
print time.time()-start
start=time.time()
for i in range(1000000):
134>>3<<5&0x07
print time.time()-start
print '乘除法運算'
start=time.time()
for i in xrange(1000000):
134/8*32%8
print time.time()-start
start=time.time()
for i in range(1000000):
134/8*32%8
print time.time()-start
計算一百萬次結果如下
位運算
0.0710000991821 #xrange
0.095999956131 #range
乘除法運算
0.219000101089 #xrange
0.225999832153 #range
首先明確一下,python2中是存在xrange 和range 這兩個函數的。
區別在於 xrange(1000)不會直接在內存中生成一個長度爲1000的列表,而是用到一個生成一個。而range是直接生成一個長度爲1000的列表。
在python3中xrange取代了range 也就是說所有的range也不會直接在內存中生成,而是不斷迭代產生的。
以上的結論表明
- xrange 速度快過range
- 位運算速度快過乘除運算
- 位運算比乘除法快2倍
從效率上看,使用移位指令有更高的效率,因爲移位指令佔2個機器週期,而乘除法指令佔4個機器週期
但是我們要知道這是計算了一百萬次的134除以8乘以32再除以8後取餘數
而且計算機還不做化簡、分配律結合律,完全是硬算出來的。
最慢的也只用了0.22秒。
是不是覺得計算機真的很高效,很偉大。
不,你錯了,你隨便寫幾行代碼,就讓這麼偉大的計算機報各種錯運行不下去了。