來源:Pexelspython
Python這兩年很是火,隨處可見的廣告讓它逐漸變成了一種老小皆知的存在。程序員
雖然問世幾十年後,Python才獲得編程社區的重視。編程
可是,其發展的勢頭彷佛無人能及。瀏覽器
自2010年年初以來,Python一直在蓬勃發展——在流行趨勢方面,它最終超過了C、C#、Java和Javascript,成爲計算機語言中的「大熱門」。安全
它爲人們提供了優質的服務——但這樣的趨勢會持續到何時呢?Python什麼時候會被其餘語言取代?爲何會這樣?服務器
關於Python的確切有效期衆說紛紜,這些猜想可能會像科幻小說同樣荒誕不經。與其猜想,不如評估一下當前促進Python流行的優點,以及將來會阻礙其流行的劣勢。網絡
Python的成功體如今Stack Overflow趨勢上,該趨勢測量了平臺上帖子的標籤數量。考慮到Stack Overflow的大小,這確實是衡量語言受歡迎程度的良好指標。框架
Stack Overflow上各類編程語言的標籤快照機器學習
儘管R語言在過去幾年一直處於平穩狀態,並且不少其餘語言也處於穩步降低趨勢,但Python的增加卻彷佛勢不可擋。在全部的Stack Overflow問題中,幾乎有14%被標記上了「python」,並且這種趨勢愈來愈明顯。如下是出現這種狀況的幾個緣由:編程語言
Python大約誕生於90年代。這不只意味着它有足夠的時間成長,還得到了一個龐大的粉絲羣體。
因此若是人們在用Python編碼時遇到了問題,那麼極可能只需用谷歌搜索一下便能解決。這不過是有些人已經遇到了相同的問題,寫了一些有助於解決問題的內容而已。
Python已經存在了數十年,程序員們可利用這段時間寫出優質的教程。除此以外,Python的語法也很容易理解。
首先,無需指定數據類型。指定變量便可;Python會根據語境判斷它是整數、浮點值、布爾值仍是其餘值。對於初學者來講,這是一個很大的優點。若是是C++語言,那麼用浮點值替換整數時,程序將不會進行編譯,曾經使用該語言編程的初學者應該對這種狀況帶來的挫敗感深有體會。
若是初學者曾經並行閱讀過Python和C++代碼,那麼會明白Python是多麼容易理解。
即便C++語言在設計時考慮到了英語,可是和Python代碼相比,它仍是難以看懂。
Python已經存在了至關長的時間,開發人員們根據不一樣目的製做出了不一樣的程序包。如今,幾乎全部的東西都能打包。
想處理數字、向量和矩陣?Numpy是個好幫手。
想對技術和工程進行計算?用Scipy。
想在數據處理和分析領域大展身手?試試Pandas。
想從人工智能入手?爲何不用Scikit-Learn。
不管人們要管理什麼樣的計算任務,都有可能用到Python程序包。從機器學習在過去幾年間的迅猛發展即可看出,自身用途的普遍讓Python處於近期發展的前列。
來源:Pexels
根據先前的論述,能夠想象Python會在很長一段時間以內保持發展的迅猛勢頭。但和其餘技術同樣,Python也有本身的弱點。筆者將一一介紹其最值得關注的缺點,並分析這些缺點是否致命。
Python的速度很慢。真的很慢。和其餘語言相比,Python須要花2-10倍的時間來完成任務。
速度慢有多種緣由。其中一個緣由是Python屬於動態類型——請記住,無需像其餘語言同樣指定數據類型。這意味着須要佔用大量內存,由於程序須要爲那些可在任何狀況下運行的變量保留足夠的空間。大量的內存佔用轉化爲大量的計算時間。
另外一個緣由是Python一次只能執行一個任務。靈活的數據集會出現這樣的結果——Python須要確保每一個變量只有一個數據類型,平行進程可能會形成混亂。
相比之下,普通的網絡瀏覽器一次能夠運行十二個不一樣的線程。還有一些其餘的理論。
但歸根結底,全部的速度問題都可有可無。電腦和服務器的價格十分便宜,因此人們討論的只是關於幾分之一秒的運行速度。並且終端用戶並不在乎本身是用0.001秒仍是0.01秒加載應用程序。
起初,Python使用動態做用域。這基本上意味着,爲了評估表達式,編譯系統首先要搜索當前塊,而後依次搜索全部調用函數。
動態做用域方面的問題在於,每一個表達式都須要在每一個可能的語境中進行測試——這至關繁瑣。這就是大多數現代編程語言都使用靜態做用域的緣由。
Python曾試圖過渡到靜態做用域,但卻形成了混亂。一般狀況下,內部做用域——好比函數中的函數——將可以查看並更改外部做用域。但Python中的內部做用域只能查看外部做用域,卻不能對其進行更改。這會致使嚴重的混亂。
儘管Python具備很高的靈活性,但Lambdas的使用仍是有必定的侷限性。在Python中,Lambdas只能是表達式,而不能是語句。
另外一方面,變量聲明和語句始終是語句。這意味着Lambdas不能爲它們所用。
表達式和語句之間的區別至關隨意,而其餘語言並無這樣的狀況。
空格讓代碼更容易看懂,但也讓其更難以維護。圖源:Unsplash
Python使用空格和縮進來表示不一樣級別的代碼。這使得代碼在視覺上更具備吸引力,可以直觀理解。
其餘語言,好比C++語言,更多使用的是大括號和分號。雖然在視覺上沒有什麼吸引力,對初學者也並不友好,但這樣作讓代碼更易於維護。對於較大的項目來講,這大有幫助。
Haskell這樣較新的語言解決了這個問題:該語言多使用空格,但又爲那些不想使用空格的人提供了另外一種語法。
人們見證了從臺式機到智能手機的轉變,很明顯,人們須要強大的語言來構建移動軟件。
但正在使用Python進行開發的移動應用軟件並很少。這並不意味着用Python進行移動開發沒法實現——名爲Kivy的Python程序包就能夠作到移動開發。
但Python並無考慮到移動設備。因此即便它有可能完成一些基本任務,也最好使用爲移動應用程序開發而建立的語言。普遍使用的移動編程框架包括React Native、Flutter、Iconic和Cordova。
須要明確的是,在將來的不少年,筆記本和臺式機應該都會繼續存在。可是,移動設備在通訊量方面已遠遠超越了桌面設備,所以能夠確定地說,想要成爲經驗豐富的全能型開發人員,只學習Python是不夠的。
Python腳本並非遵循先編譯後執行的流程。相反,它在每次執行時進行編譯,因此任何編碼錯誤在運行時都會顯現出來。這會致使性能降低、浪費時間以及須要進行大量測試。真的是大量的測試。
對於初學者來講,這是一件好事,由於他們能夠從測試中學到不少。但對於經驗豐富的開發人員來講,對Python中的複雜程序進行調試會讓他們感到無所適從。性能不佳是在Python上設置時戳的最大緣由。
來源:Pexels
· Rust具有與Python相同的安全性——不會意外覆蓋任何變量。但它經過全部權和借用的概念解決了性能問題。Stack OverflowInsights顯示,它仍是過去幾年當中最受人們喜好的編程語言。
· Go很是適合初學者,就像Python同樣。它是如此簡單,甚至連維護代碼都變得更加容易。有趣的一點是:Go開發人員是市場上收入最高的程序員之一。
· Julia是一種很是新的語言,可與Python展開正面競爭。它填補了大規模技術計算的空白:之前,人們一般會使用Python或Matlab,並使用C++庫對整個程序進行修補,這一過程在大規模技術計算中是必需的。如今,人們可使用Julia,而沒必要費力使用兩種語言。
雖然市面上還有其餘的語言,但Rust、Go和Julia倒是彌補了Python弱項的語言。全部這些語言都在還沒有投入使用的技術中表現出色,在人工智能領域的表現尤爲亮眼。Stack Overflow標籤的數量顯示,這些語言的市場份額仍然很小,儘管如此,它們將來的上升趨勢卻顯而易見。
Stack Overflow上各類編程語言的標籤快照
目前,Python十分流行,能夠說是無處不在,新語言要想取代它,確定須要五年(甚至多是十年)的時間。
這個時候,很難說會是哪一種語言取代Python(Rust、Go、Julia仍是將來的某種新語言)。但考慮到Python體系結構中最基本的性能問題,必定會有某種語言取代它的位置。
你以爲呢?
編譯組:周果、李林虹 相關連接: https://towardsdatascience.com/why-python-is-not-the-programming-language-of-the-future-30ddc5339b66 如轉載,請後臺留言,遵照轉載規範
ACL2018論文集50篇解讀 EMNLP2017論文集28篇論文解讀 2018年AI三大頂會中國學術成果全連接 ACL2017論文集:34篇解讀乾貨全在這裏 10篇AAAI2017經典論文回顧