世上最慢“動物”之一,為啥程式設計師卻很愛“它”
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點原很現實程式設計師
- 為什麼不能用中文進行程式設計,而英文卻可以?程式設計師的分析很透徹!行程程式設計師
- web前端入門很容易,全棧卻很難,為什麼每個程式設計師都那麼說?Web前端全棧程式設計師
- 程式設計師工資高,卻有很多人想轉行,理由很簡單!程式設計師
- 程式設計師何苦為難程式設計師?程式設計師
- 程式設計師之愛情觀程式設計師
- 程式設計師越來越多,為啥工資反而越來越高?程式設計師
- 為什麼程式設計師老愛買雲伺服器?程式設計師伺服器
- 程式設計師,熱愛你的 bug程式設計師
- 這張卡火了,為啥被10w程式設計師惦記?程式設計師
- 中外程式設計師到底有啥區別?程式設計師
- Java程式設計師須知:分散式微服務為什麼很難?Java程式設計師分散式微服務
- 完了!Windows弱爆了!它才是程式設計師的首選!程式設計師:真的好用!Windows程式設計師
- 程式設計師修神之路--做好分庫分表其實很難之一(繼續送書)程式設計師
- 京東程式設計師的購物車裡都藏著啥?| 1024 特別策劃程式設計師
- 程式設計師面試能力通過,卻被技術主管拒絕,HR回覆原因,程式設計師以為聽錯了程式設計師面試
- 解析:為什麼企業很難招聘到好的Python程式設計師?Python程式設計師
- 【本人禿頂程式設計師】過年了,給親朋好友解釋“啥是程式設計師”程式設計師
- 【科普】碼農是程式設計師嗎?碼農與真正程式設計師的區別是啥?程式設計師
- 女程式設計師,為什麼比男程式設計師少???程式設計師
- 程式設計師神器 StackOverflow 10 歲了,它長大後想成為什麼?程式設計師
- 程式設計師薪資高嗎?愛跳槽就是因為薪資嗎?程式設計師
- 為啥程式設計師下班後只關顯示器從不關電腦?程式設計師
- 神愛程式設計師,於是帶來Python程式設計師Python
- 相愛相殺:程式設計師的數學程式設計師
- 10.24程式設計師節專輯——程式設計師最愛的數字,1024的祕密程式設計師
- 科技愛好者週刊(第 174 期):全能程式設計師 vs 特長程式設計師程式設計師
- AI程式設計師薪資 5W+,你卻只能……AI程式設計師
- 敲程式碼時,程式設計師戴耳機究竟聽的啥?程式設計師
- 最全SpringBoot學習教程,程式設計師必學之一Spring Boot程式設計師
- 我是一名程式設計師而且我很蠢程式設計師
- 她說:為啥程式設計師都特想要機械鍵盤?這答案我服!程式設計師
- 程式設計師收入那麼高,為什麼卻從不見他們炫富?程式設計師
- 程式設計師自黑的梗!產品經理:功能實現起來很簡單!—程式設計師:*&%程式設計師
- 程式設計師給女友最好的禮物是....程式設計師
- 程式設計師思維看愛情是什麼?程式設計師
- 程式設計師與「中臺」的愛恨交錯程式設計師
- 優秀的程式設計師都熱愛寫作程式設計師