zoukankan      html  css  js  c++  java
  • Python tricks(6) -- python代码执行的效率

    python作为一个动态语言, 本身学习曲线比较平滑, 效率相比起来会比c++和java低一些. 脚本语言都是运行时编译的, 这个对于效率的影响是非常大的.

    我借用参考1的代码, 加了点代码import time

    import time
    
    
    class Timer(object):
        def __init__(self):
            pass
    
        def __enter__(self):
            self.start = time.time()
    
        def __exit__(self, exception_type, exception_val, trace):
            print "elapsed:", time.time() - self.start
    
    
    # case 1
    def main():
        for _ in xrange(10 ** 8):
            pass
    
    with Timer():
        main()
    
    # case 2
    with Timer():
        for _ in xrange(10 ** 8):
            pass
    

    代码很简单, 就是循环10**8次, 二者的区别是, 一个是直接循环, 另外一个是封装成一个main函数, 运行结果如下

    elapsed: 3.53965115547
    elapsed: 5.47090697289
    

    封装成函数的要比直接循环会快很多. 我不是很清楚这其中具体的原因, 这里我根据个人的理解, 解释一下, 纯属个人意见.

    python运行时编译(JIT), 封装成函数的这个可以整体编译, 解释器可以针对函数作编译后的优化, 直接循环的, 无法作编译后优化, 可能是这个原因导致了二者性能的差异.

    python的性能优化方法有很多种, 最简单的方式是用更快的python解释器, python是有多种实现的, 官方提供的是CPython, 此外还有Jython(jvm的实现), IronPython(.Net的实现), pypy(纯python实现的), stackless python等很多种实现.

    pypy是一个性能不错的解释器, 相同的例子, 在我的机器上使用pypy的运行结果如下

    elapsed: 0.117020130157
    elapsed: 0.501815080643
    

    这个的性能提升还是非常明显的, pypy是大家可以考虑的一个解释器.

    水平有限, 欢迎拍砖!

    参考

    1. 代码执行的效率: http://coolshell.cn/articles/7886.html
    2. pypy: http://pypy.org/
  • 相关阅读:
    不可或缺 Windows Native (15)
    不可或缺 Windows Native (14)
    不可或缺 Windows Native (13)
    不可或缺 Windows Native (12)
    不可或缺 Windows Native (11)
    不可或缺 Windows Native (10)
    不可或缺 Windows Native (9)
    不可或缺 Windows Native (8)
    不可或缺 Windows Native (7)
    不可或缺 Windows Native (6)
  • 原文地址:https://www.cnblogs.com/icejoywoo/p/3551013.html
Copyright © 2011-2022 走看看