世上最慢“動物”之一,為啥程式設計師卻很愛“它”
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 啦!
相關文章
- 為啥程式設計師工資高,卻很多人想轉行,這4點原很現實程式設計師
- 為啥程式設計師喜歡Android?程式設計師Android
- 為什麼不能用中文進行程式設計,而英文卻可以?程式設計師的分析很透徹!行程程式設計師
- web前端入門很容易,全棧卻很難,為什麼每個程式設計師都那麼說?Web前端全棧程式設計師
- 程式設計師的愛情程式設計師
- 愛偷懶的程式設計師是好程式設計師程式設計師
- 程式設計師四十很尷尬程式設計師
- 程式設計師真的很懶程式設計師
- 程式設計師的出路之一程式設計師
- 程式設計師工資高,卻有很多人想轉行,理由很簡單!程式設計師
- 程式設計師之愛情觀程式設計師
- 程式設計師如何愛護眼睛程式設計師
- 程式設計師的愛情詩程式設計師
- 內向的人很難成為群體程式設計師嗎?程式設計師
- 程式設計師真的很窮嗎?程式設計師
- 誰說程式設計師很屌絲?程式設計師
- 為啥不離線程式設計呢?線程程式設計
- 程式設計師越來越多,為啥工資反而越來越高?程式設計師
- 程式設計師何苦為難程式設計師?程式設計師
- 程式設計師何必難為程式設計師程式設計師
- 極客和程式設計師最愛的9件情人節禮物程式設計師
- 程式設計師,熱愛你的 bug程式設計師
- 請相信程式設計師的愛情程式設計師
- 有些程式設計師可能很輕鬆()... (轉)程式設計師
- 看起來很適合程式設計師哦程式設計師
- 這張卡火了,為啥被10w程式設計師惦記?程式設計師
- 別問我為啥哭,只因我是一名程式設計師!程式設計師
- 計算機愛好者 VS 程式設計師計算機程式設計師
- 為什麼國外程式設計師愛用蘋果 Mac 電腦?程式設計師蘋果Mac
- Java程式設計師須知:分散式微服務為什麼很難?Java程式設計師分散式微服務
- 中外程式設計師到底有啥區別?程式設計師
- Javascript基礎與物件導向基礎~第一講啥叫程式設計,啥叫程式設計師JavaScript物件程式設計師
- 程式設計師們的愛情表白書程式設計師
- 一個程式設計師的愛情自白程式設計師
- 一個程式設計師的愛戀 (轉)程式設計師
- 溫馨可愛的《程式設計師之歌》程式設計師
- 程式設計師面試能力通過,卻被技術主管拒絕,HR回覆原因,程式設計師以為聽錯了程式設計師面試
- 寫程式碼為啥能拿高薪?程式設計師職業薪酬報告解讀高薪程式設計師