python 之 如何使用一些工具和方法来提高代码的运行速度

1.数据结构一定要选对

  • 假如有百万个数据进行排序,如果选择列表,排序可能需要8分钟,而选用字典,只用了十几秒就能搞定。

2.多用python中封装好的模块库

  • 比如numpy,matplotlib,pandas这三个。matplotlib是绘图库,这个就不多说了,numpy和pandas非常强大,

  • numpy主要是用于计算的,里面有一个多维的数组对象叫ndarray,它具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点。ndarray类型拥有很多便捷的函数可以进行矩阵运算,

  • 而pandas在大数据的处理方面有更加强大的能力。我在这方面的主要应用是将数据保存成.csv## 标题文件和从.csv文件中读入的时候用到了这个模块,用到了pandas中的Dataframe和Series,进行数据运算的时候超级方便。

3. 工具

Cython

  • Cython 是Python 的C语言扩展。准确说Cython是单独的一门语言,Cython在提速方面有很大优势 ,它专门用来写在Python里面import用的扩展库。实际上Cython的语法基本上跟 Python一致,而Cython有专门的编译器:先将 Cython代码转变成C(自动加入了一大堆的C-PythonAPI),然后使用C编译器编译出最终的Python可调用的模块。不过Cython的缺点是,你并不能真正编写Python代码,这样一来,现有代码将 不会完全自动转移成功。

Numba

  • Numba ,是Cython的竞争项目。numba把Python源码通过LLVMPy生成JIT后的.so文件来加速。不同于Cython,Numba是以JIT为主的,加速对源码的侵入性较小。而Cython则重点在加速高性能Python模块的开发上,不依赖LLVMPy项目。此外numba还很不成熟,目前兼容性相当差。

      import time
      def foo(x,y):
          tt = time.time()
          s = 0
          for i in range(x,y):
          s += i
          print('Time used: {} sec'.format(time.time()-tt))
          return s
     print(foo(1,100000000))
    

结果:
Time used: 6.779874801635742 sec
4999999950000000

    #使用numba
    
    from numba import jit
    import time
    @jit
    def foo(x,y):
        tt = time.time()
        s = 0
        for i in range(x,y):
            s += i
        print('Time used: {} sec'.format(time.time()-tt))
        return s
    print(foo(1,100000000))

结果:
Time used: 0.04680037498474121 sec
4999999950000000

Python创 始人Guido vanRossum坚信Python的许多性能问题可以归结为语言的使用不当。例如,对于CPU消耗过高的处理,可以通过一些方法来加速Python运行——使 用NumPy、使用多处理器扩展、或借助外部C代码从而避免全局解释器锁(GIL)——Python缓慢的根源。但由于在Python中还没有可行的 GIL替代语言,Python仍将在短期落后于其他语言——甚至可能更长时间。

Guido van Rossum还说过:

如果你开发的系统发现了性能瓶颈,通常最有效率的做法是找到出问题的代码块,用速度较快的语言如C或C++写一些代码替换该功能或该模块,而不是用C或C++重写整个系统,因为对大部分代码而言,语言的速度是无关紧要的

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值