為什麼Python效率這麼低,還這麼火?

strong-lee


決定Python“火”的原因有很多,而你所謂的Python運行效率低,這個問題不重要!

Python為什麼火,三分因天時,七分被炒作

Python誕生於1991年,屬於90後,快到而立之年了。為啥突然就火了呢?因為大數據這個時代背景。


要玩大數據,統計知識第一,編程第二。也就是說,你數學很厲害,但是編程不厲害,這個時候你會怎麼辦?你希望要是有一種在科學計算方面很厲害,但很容易掌握的編程語言就好了。


而Python就具備這樣的特點。Python語言簡潔易讀,從算術,到微積分,到線性代數,Python在科學計算方面相當給力。


因此,Python成了大數據的首選編程語言。


大數據是個好概念,Python容易學習,所以Python就成了培訓機構可蹭的熱點

要玩轉大數據,只會Python遠遠不夠,更別說學Python高薪就業了。但大數據自帶流量,所以想炒作它的人比比皆是。


首先企業要炒大數據概念,哪怕賣煎餅,也要跟大數據扯上關係。似乎還真能扯上關係,煎餅的口味基於大數據。如果你仔細想,它不是那麼回事,但絕大部分人沒有這閒工夫去仔細思考的。


企業炒作大數據概念,那培訓機構一定會跟上。因為想去參加培訓的人會覺得,企業都在談大數據,那學大數據好找工作呀。如果你仔細想,它也不是那麼回事。


不管是不是那麼回事,Python是被炒作起來了,它不想火都難。


Python運行效率怎麼樣?這需要綜合評估。

評估一門語言,如果離開了目標和成本來判斷好壞,那就是扯淡。比如去你家樓下買菜。走路去買,效率是最高的。但人走路的速度非常慢,比不上單車,更比不上代步車。所以,你不能說走路這麼慢,為什麼還有人走路。


人力的成本遠比機器貴。一門語言學習陳本低,意味著企業對這麼技能所花的錢,也相對較低。所以運行效率不重要。再說了,Python的運行效率低嗎?


火的東西,可以蹭熱點,但別把自己蹭進去了。



那我拍


看到很多人的回答顛倒因果,作為一個不精通二三十種語言的陳年碼農,忍不住說幾句。

說Python的Library多,生態圈大,這是結果,這是“火”的同義詞。原因是什麼呢?大約十年前,有些庫Perl裡有,Python裡還沒有呢。它為什麼能超過Perl及其它一些腳本語言呢,根本原因還是在於其語言自身。

最重要的原因,它是最適合工程的腳本語言。一個語言,沒必要牛逼到大多數人看不懂,這樣做出來的項目易讀性可維護性差。而Python,作為數學家發明的語言,天生就考慮其嚴謹。結果是優雅,易讀,易維護,重用度高。

下面說“效率”。三個原因。

1.隨著硬件的發展,運行效率越來越不重要。Python發明的前十幾年為啥沒火?這也是一個原因。

2. 開發效率更重要。這也是前面說的工程的問題。

3.分割的問題。需要效率的地方用C/C++嘛。世界總是需要膠水語言的,而且會越來越多,因為底層的算法的數量相對於上層的應用而言,應用更加多變。上層開發的人遠多於底層開發的人。

歸根結底一句話:適合於工程(開發效率高,維護成本低)。


蘿蔔頭實驗室


作為一個資深的程序員,我來談一談關於編程語言的發展吧,其實對於一門編程語言的評價不能僅僅只從性能,效率來看。一門編程語言的發展好壞是多方面的因素的,其實一門語言的火爆從側面也反映了語言和這個時代發展的相適應性。


如果你看過保羅・格雷厄姆的那本經典之作《黑客與畫家》,你就能從中瞭解和發現語言發展的趨勢。


性能和效率或許不是最重要的

無論一百年後的計算機是什麼樣子,我們基本上可以斷定它們的運行速度一定會快得多。如果摩爾定律依然成立,一百年後計算機的運行速度將是現在的 74 乘以 10 的 18 次方倍(準確地說是 73 786 976 294 838 206 464 倍)。真是讓人難以想象。不過實際上更現實的預測並不是速度會提高這麼多,而是摩爾定律最終將不成立。不管是什麼東西,如果每 18 個月就增長一倍,那麼最後很可能會達到極限。但那時的計算機比現在快得多大概是毫無疑問的。即使最後只是略微快了 100 萬倍,也將實質性地改變編程的基本規則。如果其他條件不變,現在被認為運行速度慢的語言(即運行的效率不高)將來會有更大的發展空間。

……
既然在現實中一些應用程序本身的效率較低,而另一些應用程序會耗盡硬件提供的所有運算能力,那麼有了更快速的計算機就意味著編程語言不得不應付更多的極端情況,涵蓋更大範圍的效率要求。我們已經看到這種情況發生了。要是以幾十年前的標準衡量,有一些使用新語言開發的熱門應用程序對硬件資源的浪費非常驚人。
不僅編程語言有這種現象,這實際上是一種普遍的歷史趨勢。隨著技術的發展,每一代人都在做上一代人覺得很浪費的事情。30 年前的人要是看到我們今天如此隨意地使用長途電話,一定會感到震驚。100 年前的人要是看到一個普通的包裹竟然也能享受一天內從波士頓發件、途經孟菲斯、抵達紐約的待遇,恐怕就要更震驚了。
我已經預測了,一旦未來硬件的性能大幅提高將會發生什麼事。新增加的運算能力都會被糟蹋掉。

上面的引用部分,節選自《黑客與畫家》這本書。

看到保羅・格雷厄姆說的,是不是有一點恍然大悟,或者是這麼個道理的感覺?所以說:隨著 CPU 等各種硬件性能的提升,語言之間帶來的一些性能差,慢,都會被硬件提升所抵消,甚至在以後讓你都感覺不到了,即使語言性能很差,但是硬件的提升,還會讓你感覺有些硬件性能過剩,語言這麼爛,都幹不過硬件。


所以,未來語言發展的趨勢肯定不是一味的追求性能和效率的語言,因為語言效率和性能可以被硬件的發展所抹平。


簡單,易用的語言才是趨勢

其實,對於一門編程語言來講,它的流行和火爆從側面就反映了一個現象,那就是簡單易用,人們用起來簡單,開發效率高就可以,我用著舒服,學起來簡單,操作起來簡單,這才是語言發展的趨勢。那麼 Python 火爆的原因是不是就找到了?


Python 的特點就是簡單,易用,開發起來速度快,這是語言發展的時代要求。所以,Python 火了。

人工智能框架的帶動

現在人工智能非常火爆,而很多人工智能的框架和接口都是 Python 的,例如 tensorflow 和 pytorch 等。隨著人工智能的火爆,大家就開始炒作 Python 了,從而導致學習 Python 成為了一種流行的趨勢。所以,Python 目前看來是大火了。


關注「非著名程序員」,每天分享有價值的科技內容,也歡迎大家在回答底下留言,一起交流分享,另外回答不易,請點贊支持。感謝!

非著名程序員


效率的高與低,並不是簡單的看跑分結果,更重要的是看解決問題的時間。每個語言在自己的領域都有獨特的優勢,在解決自己領域的問題時效率是最高的。因此,Python在下面幾個領域的效率並不低:

1. 數據科學:基於pandas、numpy、sklearn、matplotlib等一系列現有庫,python可以高效的完成業務部門需要的數據分析和展現工作

2. 大數據處理:現在已經是一個分佈式處理為主的時代了,很多的測試還只是侷限於單機系統。大數據處理框架Spark有python接口。這樣主要運行由Spark分佈式框架完成,加上python的簡單語法,能夠高效完成大數據的清洗轉換等處理

3. 人工智能:現在許多優秀的深度學習神經網絡都有python接口,例如tensorflow和pytorch等。這些框架可以基於GPU和TPU等硬件加速,python並不會是性能瓶頸。

因此,效率高與低都是相對的,需要分析選擇合適場景的工具和框架。同時也要考慮其他因素,例如團隊的學習成本。





雲霄2019


我覺得你的想法不對(雖然我是初學者),ps和word,Excel,等算得上大型軟件工程吧,可是很多時候姑且70%人們只是需要這些軟件幾個功能而已,這就是py存在的道理,有一輛法拉利很炫,可是在大多數的道路上大多數時間裡也絕對不允許你跑200邁以上,人能編的出來,時間不允許,時間允許,成本花費不允許,說到底看的是綜合效率,要不圖靈機早就是最完美的計算機了


別怕咱們就是剛


這是一個引戰的話題,不過我還是想說幾句。

任何一個討論語言效率問題的人,請先問下有沒有搞清楚什麼是效率?

軟件工程發展至今,大型系統基本不可能通過一種語言去架構,c語言到是效率高來著?能去寫一個web應用嗎?如果硬要寫當然可以,但是當你用c語言寫完之後,估計這個項目都已經涼了。

python從來就不是為了所謂的運行效率而生的,運行效率在整個軟件工程裡並不佔有多麼大的比重,更多的還是在於處理業務邏輯上面。

從python的歷史來講,當初因為當初很多非計算機專業的科學家需要一門語法簡潔,數據結構清晰的語言用於科學計算,數據分析等等,於是選擇了python,併為此建立了大量的生態體系,由此火了一把。

再後來很多搞爬蟲的因為語法簡潔也選擇了python,爬蟲本身並不需要利用CPU運算,主要是IO相關的。

至於說用python在web應用或者說後端開發上,我覺得90%的功能都可以架構在這上面,有涉及到計算密集型的服重新用c寫一遍,然後用python調用就完了。

很多人說小批量用戶可以用python,用戶量大了就不行了。

我想問問,用戶量大,併發的瓶頸真的是語言本身嗎?前端負載做好優化了嗎?內部服務是不是都是異步的?數據庫怎麼優化的?

事實上用c語言或者go乃至rust之類的,都能寫出所謂“性能”不錯的代碼,但是絕對不是在那些嘴上說著python效率低的程序員手上,因為他們的視覺還在某種語言本身,而不是在架構層面去考慮問題。


紙飛機編程


時勢造英雄,Python趕上如今的智能時代了,大量處理自然語言信息。擱50年前計算機都是數學家們在用,就是適合數值計算的Fortran流行。30年前嵌入式設備開始蓬勃發展,C就開始流行。。。。


Da2


非底層計算機軟件(操作系統、編譯器、數據庫、驅動程序、通訊協議屬於底層計算機軟件)的效率高低與語言沒有過多的關係。效率取決以下兩點:

1、編碼者(一般也叫程序員)的業務認知水平和語言熟悉程度;

2、計算機硬件和配套軟件高低,例如:64位PhotoShop軟件在64位操作系統環境下,內存大於8G下對於一張容量大於4G的圖片進行處理的效率肯定高於32位PhotoShop軟件在32位操作系統4G內存的效率;

Python至於火爆的原因,是Python語言具備容易上手並且在某些領域(深度學習、數據採集)能夠快速滿足業務開發的需要造就的。


老虎哥說事


其實我想告訴你,只要你肯先花幾天時間先寫好處理代碼,c語言處理文字或者圖片比word和ps處理速度能快十倍,所以你可以換個問題,word和photoshop運行效率這麼低,為什麼還那麼火?


還要要什麼自行車


因為簡單的語音能讓你專注於業務和算法實現,而不是被看似強大卻使用麻煩的規則所禁錮。

不要糾結於語言問題,那只是個工具。程序的背後是算法和數學。即使你不太精通編程,但能把算法說清楚,也是牛人一個。


分享到:


相關文章: