代碼中的小細節,讓你感嘆自己的強大

平時使用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也不會直接在內存中生成,而是不斷迭代產生的。

以上的結論表明

  1. xrange 速度快過range
  2. 位運算速度快過乘除運算
  3. 位運算比乘除法快2倍

從效率上看,使用移位指令有更高的效率,因爲移位指令佔2個機器週期,而乘除法指令佔4個機器週期

但是我們要知道這是計算了一百萬次的134除以8乘以32再除以8後取餘數

而且計算機還不做化簡、分配律結合律,完全是硬算出來的。

最慢的也只用了0.22秒。

是不是覺得計算機真的很高效,很偉大。

不,你錯了,你隨便寫幾行代碼,就讓這麼偉大的計算機報各種錯運行不下去了。

你更強大!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章