Python 性能快速優化: 系列一

注: 本文的原文地址 quick-python-performance-optimization-part-ihtml

Python可能最容易扼殺你的想法,但不是最好的代碼實現。儘管強烈反對過早優化,但在 Python 代碼中一點點的優化均可能帶來巨大的性能提高。python

解釋僅僅是目的,最正確的方式是每天使用 Python 編程,而且與性能影響相關。編程

  • %timeit (per line)%prun (cProfile) 在 ipython 的交互式 Shell 中

當你的代碼在工做時,分析你的代碼,而且嘗試找出性能瓶頸在哪裏。這不與過早的優化是萬惡之源這個事實相反。這意味着一級優化,而不是進入冗長的優化序列。數據結構

更多的分析你的 Python 代碼,你須要閱讀這個 python-performance-analysis函數

另一個有趣的包, line_profiler 是一行一行的分析代碼
分析 line_profileroop

  • 下降方法調用次數,若是你有一個列表須要操做,傳遞整個列表,而不是遍歷整個列表而且傳遞每一個元素給函數並返回。
  • 使用 xrange 代替 range。(在 Python2.x 中這樣作,由於 Python 3.x 中是默認的)

xrangerange 的 C 實現,着眼於有效的內存使用。post

  • 對於大數據,使用 numpy,它比標準的數據結構好不少。性能

  • "".join(string)+ or +=大數據

  • while 1while True優化

  • list comphrension > for loop > while

列表推導比循環遍歷列表快,但 while loop 是最慢的,須要使用一個外部計數器。

  • 使用 cProfilecStringIOcPickle

一直使用 C 版本的模塊

  • 使用局部變量

局部變量比全局變量,內建類型以及屬性快。

  • 列表和迭代器版本存在 - 迭代器是內存效率和可伸縮性的。使用 itertools

建立生成器以及儘量使用 yeild,它們比正常的列表方式更快。

http://www.diveinto.org/python3/iterators.html

http://stackoverflow.com/questions/231767/the-python-yield-keyword-explained

讓我繼續下一個層次的第二部分快速優化技巧

相關文章
相關標籤/搜索