python會不會出4_無極4網人生苦短,Python會不會被取代?國外網友

本文經AI新媒體量子位(公眾號ID:QbitAI)授權轉載,轉載請聯系出處。

人生苦短,我該不該選擇Python?

編程語言幾年一變樣,榜單之爭也是愈演愈烈,還架不住時不時殺出個黑馬……

而對于Python,自2010年初以來一直蓬勃發展至今,在流行程度上,也超越了C、C++、Java等老牌編程語言。

那么問題來了:

這種趨勢將持續到什么時候?最終會因何故被其他語言取代?

對于Python是不是the language of the future,無極4新聞平臺網友們展開就此展開一番激辯。

反方:必然會有一種語言取代Python

一位名叫Rhea Moutafis的網友認為,Python不會是“未來的編程語言”。觀點僅發布數日,便得到了10.2k的點贊。

他從“流行原因”、“缺點”以及“何時、何故被取代”三方面做了闡述。

Python為何現在如此流行?

Moutafis認為,Python的成功,一定程度體現在Stack Overflow的趨勢上。這個平臺衡量了發布帖子中的標簽數量,再考慮到它的規模,對于“受歡迎編程語言”來說是個不錯的指標。

從圖中可以看出,R語言在過去幾年中處于穩步增長的狀態,但其他語言,像C#、C++、Java和JavaScript,都有下降的趨勢。

而在所有Stack Overflow的問題中,幾乎有14%的問題被貼上了 “Python “的標簽,而且這個趨勢還在上升。

Moutafis認為,原因有如下3個方面。

首先,Python也算是一個老牌語言。

Python從90年代便已出現,這不僅意味著它有足夠的時間來發展,還意味著擁有一個龐大而強有力的社區支持。

所以你在用Python編程的時候,如果遇到了任何問題,只要網上搜索一下,大概率就能解決掉。

因為很有可能在你之前,就有人遇到過同樣的問題,還在網上留下了寶貴的意見。

其次,Python對于初學者來說是友好的。

對于這一點,并不是說它存在了幾十年,給了程序員們充足的時間來寫使用教程。而是Python的語法易讀性特別好。

例如你不需要指定數據類型,只要聲明一個變量,Python會根據上下文,理解這個變量是屬于整數、浮點數、布爾值等等。

這對于初學者來說優勢是巨大的。如果你用過C++,你就有可能體會到這樣的痛苦:程序跑不出來,可能僅僅是因為把一個浮點數指定成了整數……

以及,如果對比著讀過Python和C++的代碼,你就能深刻的體會到Python代碼理解起來是有多么容易。

最后,Python的用于很廣。

Python從出現至今,開發人員幾乎在各個領域、用途方面開發了包(package):

想處理數字、向量和矩陣?Numpy是的你首選。

想進行技術和工程方面的計算?SciPy了解一下。

想在數據處理和分析領域大展身手?Pandas值得一試。

想涉足人工智能?Scikit-Learn真香(褒義……)。

無論你想處理哪種計算任務,Python幾乎都可以提供相應的包。從近幾年機器學習的激增,也不難看出Python一直處于發展的前沿。

Python的缺點是否具有致命性?

當然,沒有一個技術是完美的,Python也不例外。Moutafis列出了6個最重要的缺陷,還評估了它們是否具有致命性。

第一,速度 (Speed)。

平均來說,用Python運行一個任務所需要的時間,是其他語言的2-10倍。

為什么會這樣呢?其中一個原因就是它是動態類型。

就像剛才說的,你不需要指定數據類型,這就意味著它需要使用大量的內存,因為程序需要為每個變量預留足夠的空間,確保在任何情況下都能工作。而大量的內存使用量,意味著大量的計算時間。

另一個原因是Python一次只能執行一個任務。這是靈活數據類型的結果——Python需要確保每個變量只有一個數據類型,而并行進程可能會把這一點搞得一團糟。

相比之下,一般的Web瀏覽器一次可以運行12個不同的線程……

但說到底,這些速度問題都無關緊要。計算機和服務器現在很便宜了,用戶并不真正關心他們的應用程序,是否在0.001或0.01秒內能加載完。

第二,作用域 (Scope)。

最初,Python是動態確定作用域的。這基本上就意味著,要對表達式求值,編譯器首先需要搜索當前塊,然后依次搜索所有調用函數。

動態作用域的問題在于,每個表達式都需要在每個可能的上下文中進行測試。這個是相當繁瑣的過程,這也就是為什么大多數現代編程語言使用靜態作用域的原因。

對于這個問題,Python試圖過渡到靜態作用域,但卻搞砸了:通常,內部作用域能夠查看和更改外部作用域,但在Python中,內部作用域只能看到外部作用域,而不能更改它們。

第三,Lambda。

盡管Python內部的靈活性很好,但Lambda的使用還是相當有限制的。Lambda只能是Python中的表達式,而不能是語句。

另外,變量聲明和語句始終是語句,這意味著Lambda不能用于它們。

表達式和語句之間的這種區別,可以說是相當隨意,在其他語言中就不會出現這種情況。

第四,空白符 (Whitespaces)。

在Python中,你可以用空格和縮進來表示不同級別的代碼。這讓它在視覺上很吸引人,也很容易理解

而其他語言,例如C++,更多的是依賴大括號和分號。雖然這可能并不吸引人,無極4網也不適合初學者,但它讓代碼的可維護性提高了很多。對于較大的項目來說,這就更有用了。

像Haskell這樣的新語言就解決了這個問題:它們依賴于空格,但同時為那些希望不使用空格的人,提供了一種替代語法。

第五,移動開發 (Mobile Development)。

隨著應用逐步從電腦桌面轉向移動端,很明顯我們需要強大的語言來構建移動軟件。但用Python開發的移動應用并不多。

Python并不是為移動端開發而設計的,即便在基本任務上能達到差強人意的效果,但最好還是選擇專門為移動端開發的語言,例如React Native、Flutter、Iconic和Cordova。

需要明確的是,筆記本和臺式電腦仍會在未來存在一段時間。但由于移動端流量早已超過了桌面端,可以說,學習Python還不足以讓你成為一個全能型開發者。

第六,Runtime Error。

一個 Python 腳本不是先編譯,然后再執行。相反,它在每次執行時都會編譯,所以任何編碼錯誤都會在運行時顯示出來。這導致性能差、時間消耗大,以及需要大量的測試

這對初學者來說是很好的,因為測試可以教給他們很多東西。但對于經驗豐富的開發人員來說,不見得這是個好事。

在未來,何時、何故會讓Python被取代

在編程語言這個市場上,出現了一批新的競爭者:

Rust提供了和Python一樣的安全性——沒有任何變量會被意外覆蓋。但它用ownership和borrowing的概念解決了性能問題。根據StackOverflow Insights的數據,它也是過去幾年來最受歡迎的編程語言之一。

Go對于Python初學者來說也是非常棒的一門語言。它非常簡單,甚至代碼維護起來更容易。有意思的一點是,Go開發者是市場上收入最高的程序員之一。

Julia是一門非常新的語言,可以與Python一較高下,它填補了大規模技術計算的空白。在大規模計算中,人們通常會使用Python或Matlab,然后用C++庫進行修補。現在,只用Julia就可以了,不用再在兩種語言之間來回切換。

雖然市場上有其他語言,但Rust、Go和Julia是修復Python弱點的語言。

所有這些語言都擅長于未來的技術,尤其是人工智能。雖然它們的市場份額仍然很小,但從StackOverflow標簽的數量可以看出,它們上升的趨勢都很明顯。

考慮到目前Python的普遍流行,這些新語言要想取代它,肯定要花上五年,甚至整整十年的時間。

那么,取代Python的將是哪一種語言?Rust、Go、Julia,還是未來的新語言?

目前還很難說,但考慮到Python架構中的性能問題,必然會有一種語言取代它的位置。

正方:你的觀點漏洞百出

反方一辯陳述完畢,接下來,是正方的觀點。

用戶miraculixx針對Moutafis的文章,發起了猛烈攻擊,也獲得了高度關注——2.1K的贊。

miraculixx直接開門見山:

這篇文章有夠爛的。你喜歡Rust、Go和Julia?那就去寫它們好了,不要來抨擊Python。

而后,直接提出了七大錯誤之處。

Python并不慢

首先,速度有兩個組成部分。

其一,你寫出想要的程序有多快,這是客戶和大多數開發人員真正關心的。Python對于一個命令行語言來說,它的速度是非常快的,大多數其他語言所需要的時間要長得多。

其二,是執行速度。正如你所指出的,在很多情況下,這幾乎不重要,但當它有需要的時候,Python既有內置的工具來加速,也有廣泛的工具生態系統來實現native速度 (與編譯后的 C 代碼相同)。

Python確實可以并行運行多個任務

與大多數其他語言不同,Python代碼非常容易并行運行,甚至可以跨大型節點集群運行,這對于云計算來說非常好。

內置的多模塊處理,可以在本地和遠程節點上運行。還有其他工具,如Celery、IParallel、Dask等,讓并行運行代碼變得輕而易舉。

縮進,作為代碼塊的分隔符,對任何項目來說都是一種優勢

因為這樣就能確保代碼看起來與個人偏好無關,意味著更好的可讀性,這通常會增加可維護性。

無論你有1個還是100個開發者,Python都很好用

大多數項目都只有1-5個開發者,而且,Python的模塊化方法使得重構代碼變得非常容易。

模塊化是構建大型可維護軟件產品的關鍵成功因素。

靜態類型不是可擴展團隊的關鍵因素

根據我的經驗,靜態類型的影響如果不損害協作能力的話,也是可以忽略的。

團隊實際開發過程中的細節情況,超過出了你寫的評論,一言以蔽之:靜態類型很難做到處處都是對的,當出現問題的時候,還是需要更多人加入到團隊來解決。

團隊規模越大,溝通成本就越高,以n2的速度增長。也就是說,

Python并不老

Python最新版本是在2019年第四季度發布的。無論是語言還是它所支持的用例,都不能說是“老”。

你說它不能在瀏覽器中運行不僅是錯誤的,而且也沒有抓住重點。大多數語言都不能在瀏覽器中運行,因為Web語言是JavaScript。不管你喜不喜歡,事情就是這樣。

React、Flutter等都不是編程語言

把不該比較的東西混為一談,對你文章的可信度并沒有什么好處。

......

那么,你覺得Python未來的命運會是什么樣呢?

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457564.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457564.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457564.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android 音頻播放總結 soundlPool,MediaPlay

soundlPool 用于小音頻的播放多個同時播放。 使用步驟: 步驟一: 首先下載音頻文件可以將其放入assets文件夾下或者res下的raw文件夾下,區別在于assets下可以再新建文件夾而raw不行,assets內部單個文件超過1m時可能存在bug而raw不會…

文本分析軟件_十大針對機器學習的文本注釋工具與服務,你選哪個?

房地產和鍵【51CTO.com快譯】目前,從搜索引擎與情感分析,到虛擬助手與聊天機器人,機器學習應用場景中的許多研究領域,都需要通過文本注釋工具與服務來提供準確性。在AI研究與開發行業中,發現或創建可注釋的數據對于項目…

sqlite創建表

create table bike (id varchar(6) primary key, password char(6));

python 垃圾回收機制

DAY 18. python垃圾回收機制 python GC主要有三種方式 引用計數標記清除分代回收 其中,以引用計數為主。 18.1 引用計數(Reference Counting) 《尋夢環游記》中說,人一生會經歷兩次死亡,一次是肉體死的時候&#…

曲線連接線_荷重位移曲線儀操作使用注意事項-荷重位移曲線儀廠家

荷重位移曲線儀廣泛適用于各種按鍵及開關、DOME片、按鍵、微力彈片、硅膠按鍵、汽車開關之荷重-行程測定;Windows中英文雙語軟件,操作簡單方便,軟件流暢穩定,所有測試資料(測試條件,曲線,數據結果&#xff…

進程調度

1、策略 策略決定調度程序在何時讓什么進程運行。調度器的策略往往決定系統的整體印象,并且,還要負責優化使用處理器時間。 1.1 I/o消耗型和處理器消耗型。 進程可以被分為I/O消耗型和處理器消耗型。前者指進程的大部分時間用來提交I/O請求或者等待I/O請…

Django,Ajax,Vue實現文章評論功能

Django評論 評論復雜的地方在于需要實現點擊提交評論后評論內容需要立刻出現在下面,還要保持頁面位置不變,所以提交后不能整體刷新頁面,因為刷新以后頁面肯定在最上面,而評論一般都在最下面,所以要用到Ajax 整個過程用…

回歸分析什么時候取對數_冬蜜什么時候取,冬天取蜂蜜的方法

大家好,我現在分享的是,在冬天是在什么時候取蜜!冬天在我們南方,取蜜時間是十一月到十二月的時候,只要溫度達到15度以上,蜂蜜封蓋了就可以取蜜了,并且在冬天我們只能取一次,最晚取蜜…

Opencv與dlib聯合進行人臉關鍵點檢測與識別

前言 依賴庫:opencv 2.4.9 /dlib 19.0/libfacedetection 本篇不記錄如何配置,重點在實現上。使用libfacedetection實現人臉區域檢測,聯合dlib標記人臉特征點,最后使用opencv的FaceRecognizer實現人臉識別。 準備工作 1、配置好Op…

Category 的一些事

來源:伯樂在線 - Tsui YuenHong 鏈接:http://ios.jobbole.com/90422/ 點擊 → 申請加入伯樂在線專欄作者 新增實踐部分:偏方 Hook 進某些方法來添加功能 Category – 簡介 Category(類別)是 Objective-C 2.0 添加的新特…

python tfidf特征變換_機器學習的“萬能模板” - 數據分析

最后是文本變量。很遺憾Titanic數據集中沒有合適的文本變量。一般我們處理文本變量的方法是,合并所有的文本形成一個變量,然后調用Count Vectorizer或者TfidfVectorizer算法,將文本數據轉換成數字。大部分情況下,TfidfVectorizer比…

python實現哈希表

# python 實現哈希表class HashTable:"""哈希函數的構造解決沖突"""def __init__(self, source):self.source sourceself._index []self._val []self.table []self._mod 13def Output(self):print(self._index)print(self._val)def _create…

商品綜合評價排名

店內有很多產品,而且包含但不局限于以下指標:瀏覽量、訪客數、平均停留時長、詳情頁跳出率、下單轉化率、下單支付轉化率、支付轉化率、下單金額、下單商品件數、下單買家數、支付金額、支付商品件數、加購件數、訪客平均價值、收藏人數、客單價、搜索支…

ionic資源網站

http://ionichina.com/topic/570b1f4ecd63e4247a7cfcf3 http://doc.ionicmaterialdesign.com/#intro http://ionicmaterial.com/demo/ 10大materialhttp://www.open-open.com/news/view/192f93e轉載于:https://www.cnblogs.com/znsongshu/p/6079357.html

pytorch神經網絡因素預測_實戰:使用PyTorch構建神經網絡進行房價預測

微信公號:ilulaoshi / 個人網站:lulaoshi.info本文將學習一下如何使用PyTorch創建一個前饋神經網絡(或者叫做多層感知機,Multiple-Layer Perceptron,MLP),文中會使用PyTorch提供的自動求導功能,訓練一個神經…

SQL基本操作

SQL 操作 檢索數據 SELECT 檢索數據 -- 檢索單個列 SELECT 列名 FROM table_name;-- 檢索多個列 SELECT 列1, 列2 FROM table_name;-- 檢索所有列 SELECT * FROM table_name;-- 檢索不同的值 SELECT DISTINCT 列名 FROM table_name;限制檢索結果 -- SQL Server / Access SE…

git 忽略 部分文件夾_git提交忽略某些文件或文件夾

記得第一次用 github 提交代碼,node_modules 目錄死活傳不上去,哈哈哈,后來才知道在 .gitignore 文件里設置了忽略 node_modules 目錄上傳。是的, .gitignore 文件就是設置那些你不想用 git 一起上傳的文件和文件夾。比如剛接觸到…

Ajax實現原理詳解

Ajax:Asynchronous javascript and xml,實現了客戶端與服務器進行數據交流過程。使用技術的好處是:不用頁面刷新,并且在等待頁面傳輸數據的同時可以進行其他操作。 這就是異步調用的很好體現。首先得了解什么是異步和同步的概念。…

SpringJDBC解析3-回調函數(update為例)

PreparedStatementCallback作為一個接口,其中只有一個函數doInPrepatedStatement,這個函數是用于調用通用方法execute的時候無法處理的一些個性化處理方法,在update中的函數實現: protected int update(final PreparedStatementCr…

python上下文管理器

DAY 23. python上下文管理器 Python 的 with 語句支持通過上下文管理器所定義的運行時上下文這一概念。 此對象的實現使用了一對專門方法,允許用戶自定義類來定義運行時上下文,在語句體被執行前進入該上下文,并在語句執行完畢時退出該上下文&…