天天看點

《Python高性能程式設計》——1.3 為什麼使用Python

本節書摘來自異步社群《python高性能程式設計》一書中的第1章,第1.3節,作者[美] 戈雷利克 (micha gorelick),胡世傑,徐旭彬 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

python具有高度的表現力且容易上手——新開發者會很快發現他們可以在很短時間裡做到很多。許多python庫包含了用其他語言編寫的工具,使python可以輕易調用其他系統。比如,scikit-learn機器學習系統包含了liblinear和libsvm(兩者皆以c語言寫成),numpy庫則包含了blas以及其他用c和fortran語言寫的庫。是以,正确運用這些庫的python代碼确實可以在速度上做到跟c媲美。

python被譽為“内含電池”,因為它内建了很多重要且穩定的庫。包括:

<code>unicode和bytes</code>

語言核心内建。

<code>array</code>

原始類型的高效數組。

<code>math</code>

基本數學操作,包括一些簡單的統計數學。

<code>sqlite3</code>

包含了流行的基于檔案的sql引擎sqlite3。

<code>collections</code>

多種對象,包括雙向隊列、計數器和字典的變種。

<code>numpy</code>

一個python數字庫(矩陣運算的基石庫)。

<code>scipy</code>

大量可信的科學庫的集合,通常包含了廣受尊重的c和fortran庫。

<code>pandas</code>

一個資料分析庫,類似于r語言的資料框或excel表格,基于scipy和numpy。

<code>scikit-learn</code>

正在快速成為預設的機器學習庫,基于scipy。

<code>biopython</code>

一個生物資訊學庫,類似于bioperl。

<code>tornado</code>

一個提供了并發機制的庫。

各類資料庫封裝

為了跟基本上所有的資料庫通信,包括redis、mongodb、hdf5以及sql。

各類網站開發架構

用于建立網站的各種高性能系統,如django、pyramid、flask和tornado。

<code>opencv</code>

計算機視覺的封裝。

各類api封裝

用于輕松通路各種時髦的web api如google、twitter和linkedin。

為了适應各種部署環境,還有大量可選的管理環境和shell,包括:

标準發行版。

enthought公司的epd和canopy,一個非常成熟且能幹的環境。

continuum公司的anaconda,一個注重科學計算的環境。

sage,一個類似于matlab的環境,包括一個內建開發環境(ide)。

python(x,y)。

ipython,一個廣泛被科學家和開發人員使用的python互動shell。

ipython notebook,一個基于浏覽器的ipython前端,廣泛用于教學和示範。

bpython,另一個python互動shell。

python的一大優勢在于它可以快速實作出一個新主意的原型。由于存在各種支援庫,它能夠輕易測試出一個主意是否可行,哪怕第一個實作可能是磕磕碰碰做出來的。

如果你想要讓你的數學函數更快,看看numpy。如果你想要實驗一下機器學習,試試scikit-learn。如果你在清理和操作資料,那麼pandas是一個好選擇。

總的來說,我們有理由提出這樣一個問題,“為了讓我們的系統跑得更快而進行的優化從長期來看會不會反而導緻我們團隊整體跑得更慢了?”隻要花費足夠的人力,系統總是可以被榨出更多的性能,但這可能導緻系統脆弱的可維護性以及難以了解的優化并最終導緻整個團隊絆倒在地。

cython就是一個例子(7.6節),它将python代碼注釋成類似c語言的類型,被轉化後的代碼可以被一個c編譯器編譯。它在速度上的提升令人驚歎(相對較少的努力就能獲得c語言的速度),但後續代碼的維護成本也會上升。尤其是,對這個新子產品可能更難,因為團隊成員需要具備一定的程式設計能力來了解那些為了性能提升而繞開python虛拟機的折衷。