代码中的小细节,让你感叹自己的强大

来源:互联网 发布:长沙淘宝仓库打包招聘 编辑:程序博客网 时间:2024/05/13 19:31

平时使用python 时算数字就跟计算器差不多。

因为他毕竟是个高级语言。

例如

134%8 #求余数134/8 #求商的整数部分

其实我们也可以写

134&0x07134>>3  

这个位操作运算瞬间让你的python代码更快,其实乘除法也很快了。

别人可能对你的代码要另眼相看。

为了让大家更直观的看到效果我测试了一下

#coding=utf-8import timeprint '位运算'start=time.time()for i in xrange(1000000):    134>>3<<5&0x07print time.time()-startstart=time.time()for i in range(1000000):    134>>3<<5&0x07print time.time()-startprint '乘除法运算'start=time.time()for i in xrange(1000000):    134/8*32%8print time.time()-startstart=time.time()for i in range(1000000):    134/8*32%8print time.time()-start

计算一百万次结果如下

位运算0.0710000991821   #xrange0.095999956131    #range乘除法运算0.219000101089    #xrange0.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秒。

是不是觉得计算机真的很高效,很伟大。

不,你错了,你随便写几行代码,就让这么伟大的计算机报各种错运行不下去了。

你更强大!

阅读全文
0 0
原创粉丝点击