世上最慢“動物”之一,為啥程式設計師卻很愛“它”

程式設計師小城發表於2019-03-16

Python 是世界上使用最廣泛的程式語言之一,它至今已經存在了個 28 年頭。對於大多數人,尤其是剛接觸 Python 的初學者(以及 C 程式設計師)來說,有一個問題經常會被提起:“為什麼 Python 這麼慢,還能這麼受歡迎?”或者說,為什麼 Python 程式設計師、開發者不擔心它的速度問題?在這篇文章中,優達菌將帶給大家詳細分析一下主要原因。

(地球上最慢的“動物”們)

為啥 Python 在速度上沒有優勢?

在詳細分析之前,我們先來探討一下 Python 為什麼比較慢的一些客觀原因。當然,這裡的慢是相對於 C 和 C++ 等其他程式語言而言的。

高階程式語言:

用 Python 寫程式碼的時候,你的程式碼其實非常接近人類的自然語言,接近人類思考問題的方式。為了實現這一點,Python 直譯器幫你簡化了許多涉及計算機本身的細節,比如記憶體管理、指標等等…也正因為此,Python 執行起來就比其他“低階程式語言”來的慢。

Python 是解釋執行,而不用經過編譯:

嗯,我上面這句話其實說的過於概括了,並不完全準確,不過大概意思就是這樣的。在執行的過程中,Python 程式碼被直譯器讀取,並逐一執行,而不是通過編譯過程將程式碼全部編譯成電腦直接執行的位元組碼,然後再執行。

Python 是一門動態型別的語言:

和其他“靜態型別”的語言,比如 C、C++ 或 Java 不同,你在使用一個變數的時候,並不是必須要提前宣告它的型別(String 字串 / Boolean 布林值 / int 整型數字等等)。你是省事了,但這些就靠計算機來替你處理了。這也就意味著,對於每次的物件呼叫,程式需要進行大量的處理。此外,動態程度這麼高,也意味著 Python 很難以進行優化。

全域性直譯器鎖(Global Interpreter Lock,GIL):

因為 GIL 鎖的存在,基本上 Python 直譯器在同一個程式裡只能執行一個執行緒(Python直譯器的一個例項),所以整體速度難以提升。

(別問我,我不過就是用 Python 搞了個多執行緒)

為啥大家還喜歡用 Python?

在我看來,這主要是因為,在 90% 的情況下,Python 程式碼的執行速度並不那麼重要,而它的語言特性帶來的益處則是實實在在的。下面我就詳細說說其中的主要幾點:

實際使用者並不會太在意速度問題

說 Python 慢的同學,你真的能感覺出 0.001 秒和 0.01 秒的區別嗎?對於絕大多數實際使用軟體的使用者來說,這種細微的差別根本不值得在意。

正常情況下,使用者不會太在意你的軟體的處理時間有那麼一點點長。當然,如果它要卡上個兩三百年,那我想這就沒有什麼使用者體驗可言了吧。只要在使用者可以接受的範圍內,就都沒有問題。(甚至有的軟體為了給使用者一種“處理了很多資訊”的感覺,會故意把“處理中”的時間延長一點點呢。)此外,如果真的出現處理時間太長的情況,你還可以通過水平擴充套件的方式來提升你的系統處理能力,以解決一些可能出現的瓶頸,讓整個處理速度更快。

寫 Python 程式碼的效率更高

Python 如此受歡迎的首要原因是,和其他程式語言(比如 C++ 和 Java)相比,它的開發效率更高。比起其他語言,Python 的程式碼更加簡明易學,可讀性好,容易維護,學習成本和時間相對較短,甚至完成類似任務所需的程式碼行數都更少。

 

(Python 程式碼非常簡單而且容易閱讀)

Python 語言的許多特性,比如一行函式、列表生成器、動態型別等,都使開發者能用比其他語言少得多程式碼完成相同或相似的任務。它的良好可讀性也使初學者和新手學習語法的時間少了許多。比如,Python 程式碼確實在執行時的速度比 Java 慢,但 Python 程式碼的編寫時間平均只有 Java 的三到五分之一。

總的來說,Python 簡單的語法結構,較高的可讀性,以及類似英語一樣的命令語句,都讓 Python 程式的開發變得更加容易而高效。這正是大家喜歡它的一個重要原因。

執行速度慢?開發速度快才是王道!

曾幾何時,計算機的運算資源不足是軟體開發的主要瓶頸,計算時間是軟體需要消耗的寶貴資源。在這種瓶頸限制下,程式設計師們養成了絞盡腦汁優化程式碼執行效率,減少演算法複雜度的程式設計習慣。而現在,計算機、伺服器以及各種智慧硬體都變得越來越便宜,程式碼執行速度已經變得沒那麼重要了。如今,人力資源才是軟體開發企業最大的成本,開發所需的時間比軟體執行的時間寶貴多了。加快開發速度,才是有效減少開發成本,快速產生效益的重要因素。

如果真的很需要提升程式處理速度,企業完全可以通過水平擴充套件的方式,也就是部署更多的伺服器,來提升整體系統執行速度,以彌補程式碼本身的處理速度問題。隨著計算機算力的不斷攀升,多核晶片的不斷迭代,提升算力所需的成本也越來愈低。為了省一點伺服器開支,而拖慢整個團隊的開發速度,明顯不是一件划算的事情。

此外,開發速度快,也不單單是節省了人力成本。能快速迭代,易於維護,部署方便的程式碼,也能顯著地提升團隊的競爭力。這就是為什麼大家都熱衷於選擇 Python 語言的根本原因。

速度是你應該考慮的唯一因素嗎?

當然不是。不管想要開發什麼型別的軟體,在選擇用什麼程式語言的時候,你需要考慮的因素往往數以百計。沒錯,速度確實是其中之一,但它決不是唯一因素。比如,語言的適用性就是非常重要的一個因素。

幾十年來,Python 經歷了市場的考驗,形成了龐大的使用者社群。因此,作為開發企業,你很容易就能找到 Python 程式設計師,並獲得各種技術支援。

此外,Python 還擁有非常豐富的標準庫,和多種不同用途的框架,基本上算是應有盡有。舉幾個栗子,要開發網頁 app,你可以用 Django 和 Flask,要搞資料分析有 pandas,要跑深度學習有 TensorFlow,等等。

對速度要求很高的應用嗎?

上面我們聊了 Python 雖然程式碼執行速度慢,但有著許多與眾不同的優勢,使得主流軟體開發企業對它愛不釋手。也許有人會覺得我們是把 Python 吹的無所不能了吧?其實並不是這樣的。對某些嚴格要求高效能、執行速度快的程式來說,Python 並不適合。沒錯,程式設計師可以用力優化演算法,但總體上來說,這往往會犧牲可讀性,減緩開發速度,產生各種問題,還不如換用其他程式語言呢。比如,在快速實時對戰遊戲的開發上,C# 將會是一個更好的選擇。

結語

總而言之,雖然速度不如其他程式語言,Python 還因為下面這些原因,而被廣泛使用:

● 開發效率更高

● 節省最貴重的開發成本:人力資源

● 快速更新,提升競爭力

● 豐富的程式碼庫和框架

● 龐大的社群支援

當然,不好的地方我也要diss,它確實不太適合開發包括遊戲在內的許多速度密集型應用程式,也不適合開發作業系統等系統底層應用。

好啦,不說了,我先去學 Python 啦!

相關文章