Python tricks(6) -- python代碼執行的效率

python做爲一個動態語言, 自己學習曲線比較平滑, 效率相比起來會比c++和java低一些. 腳本語言都是運行時編譯的, 這個對於效率的影響是很是大的.html

我借用參考1的代碼, 加了點代碼import timejava

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函數, 運行結果以下python

elapsed: 3.53965115547
elapsed: 5.47090697289

封裝成函數的要比直接循環會快不少. 我不是很清楚這其中具體的緣由, 這裏我根據我的的理解, 解釋一下, 純屬我的意見.c++

python運行時編譯(JIT), 封裝成函數的這個能夠總體編譯, 解釋器能夠針對函數做編譯後的優化, 直接循環的, 沒法做編譯後優化, 多是這個緣由致使了兩者性能的差別.shell

python的性能優化方法有不少種, 最簡單的方式是用更快的python解釋器, python是有多種實現的, 官方提供的是CPython, 此外還有Jython(jvm的實現), IronPython(.Net的實現), pypy(純python實現的), stackless python等不少種實現.性能優化

pypy是一個性能不錯的解釋器, 相同的例子, 在個人機器上使用pypy的運行結果以下less

elapsed: 0.117020130157
elapsed: 0.501815080643

這個的性能提高仍是很是明顯的, pypy是你們能夠考慮的一個解釋器.jvm

水平有限, 歡迎拍磚!函數

 

參考性能

  1. 代碼執行的效率: http://coolshell.cn/articles/7886.html
  2. pypy: http://pypy.org/
相關文章
相關標籤/搜索