• 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/
  • 相关阅读:
    第十四章 构建自定义的同步工具(待续)
    第十三章 显示锁(待续)
    第十二章 并发程序的测试(待续)
    第十一章 性能与可伸缩性(待续)
    第十章 避免活跃性危险(待续)
    第九章 图形用户界面的并行化(待续)
    第八章 线程池的使用(待续)
    第七章 取消与关闭(待续)
    NOIp 2015真题模拟赛 By cellur925
    [USACO10MAR]伟大的奶牛聚集Great Cow Gat…【树形dp】By cellur925
  • 原文地址:https://www.cnblogs.com/icejoywoo/p/3551013.html
Copyright © 2020-2023  润新知