1. 程式人生 > >再見,Python2。你好,Python3

再見,Python2。你好,Python3

 文章首發自我的公眾號,轉載請註明出處~

 

Python2的退場,意味著一個時代的結束

 

我們這一代程式設計師基本都接觸過python2,很多人也是從python2時代一路走來的。但是,是時候說再見了。

雖然Python之父兩年前就已宣佈 Python 2.7將於2020年1月1日終止支援,但是關於版本的爭論從未停止。現在,python2停止更新的這一天已到來,亦即意味著開發者將不會再接收到任何來自Python 2.7的錯誤修復或安全更新。

我在18年的一篇部落格中曾經提到python2和python3的學習選擇,當時很多人問我,學python3還是python2。我的答案是3最好,2也可以,都學學也無妨,二者本來就差別不大。

到如今很快兩年過去了,歷經一個跌宕起伏的時代,Python 2 終於走到了盡頭。有人曾經預測python活不過10年,但是python本身的簡潔性,以及最近10年人工智慧和資料科學的興起,使得python煥發生機,變成了目前主流程式語言之一。

雖然它還有很多缺點,但是已經成為很多人工作、生活中必不可少的指令碼語言。

就在昨天,python官方宣佈,新一年的鐘聲響起之時(2020年1月1日),就是Python 2落幕之日。這意味著之後,Python 2自生自滅,官方也不會再維護和改進了。

官方的原話是

只有放棄Python 2,我們才能讓Python 3變得更好。

 

也有人念舊,表示自己會支援Python2的維護與更新,不為什麼,就是想用Python 2。

但隨著官方不再支援Python 2,近年來也有大量的工具宣佈放棄支援Python 2。比如TensorFlow、Pandas、Numpy、Jupyter Notebook、Cython等工具。

 

比如Fedora。為了解決這個問題,儘早去掉對 Python 2 的依賴,把基於 Python 2 的軟體包都移除是最佳選擇。但是實際操作起來會比較麻煩,並且可能對系統造成破壞性變更,Fedora 的幾位開發者提交了一項棄用 Python 2 軟體包的統一流程提案,希望移除 Python 2 軟體包更具可控性,讓 Python 2 退休的影響降低。

該提案具體分情況描述了幾個流程,主要涉及到針對 Python 2 subpackage(子包)、module(模組) 與 requirement(執行環境依賴)等幾個方面的處理:

  • 通過類似於孤立的過程,Python 2 子包可以很容易棄用。

  • 沒有其它功能的 Python 2 模組將被刪除。

  • 非必要的環境依賴將被刪除。

  • Fedora 社群將收集資訊以幫助“專案管理”。

  • 將從系統中刪除不可安裝的 Python 2 包。

 

如果想用好Python,擺在Python 2使用者面前的路似乎就只有一條:

升級到Python 3。

 

 

 

Python 2往事

 

Python源自20世紀80年代末,當時Python的建立者Guido van Rossum正在CWI(荷蘭數學與計算機研究所)研究Amoeba分散式計算系統,使用C和Unix shell。在這個過程中,他逐漸對這些語言感到不爽,不僅執行速度太慢,無法處理複雜邏輯,也不得不重複造輪子。

1989年的聖誕節期間,吉多為了在阿姆斯特丹打發時間,決心開發一個新的解釋程式,作為ABC語言的一種繼承。ABC是由吉多參加設計的一種教學語言,就吉多本人看來,ABC這種語言非常優美和強大,是專門為非專業程式設計師設計的。

但是,ABC語言並沒有成功。

究其原因,吉多認為是非開發造成的。吉多決心在Python中避免這一錯誤,並獲取了非常好的效果。

 

 

之所以選中Python(蟒蛇)作為程式的名字,是因為他是BBC電視劇--蒙提派森的飛行馬戲團(Monty Python’s Flying Circus)的愛好者。

1991年,第一個Python直譯器誕生,它是用C語言實現的,並能夠呼叫C語言的庫檔案。

1999年,吉多向DARPA提交了一條名為”Computer Programming For Everybody”的資金申請,並在後來說明了他對Python的目標:

  1.一門簡單直觀的語言並與主要競爭者一樣強大

  2.開源,以便任何人都可以為它做貢獻   

  3.程式碼像純英語那樣容易理解

  4.適用於短期開發的日常任務

這些想法中的基本都已經成為現實,Python已經成為一門流行的程式語言

 

  Python2的設計哲學

 

 

1. Python2開發者的哲學是:用一種方法,最好是隻有一種方法來做一件事

2.如果面臨多種選擇,Python2開發者一般會拒絕花俏的語法,而選擇明確沒有或很少有歧義的語法

 

在Python社群,吉多被稱為“仁慈的獨裁者” 

Python在2007年獲得了TIOBE年度最佳程式語言獎。該獎項是根據TIOBE指數,授予全年受歡迎程度最高的程式語言。

Python 2當時也受到大公司青睞:包括Google、Facebook、亞馬遜在內的諸多知名公司都在使用它,包括YouTube、Reddit在內的大型應用,都是出自Python。

科研機構NASA還用Python來簡化太空梭的任務流程設計,去探索太空。

“人生苦短,我用Python”成為被大多數程式設計師熟知的“梗”,Python也成為了一門吞噬世界的語言。這中間,雖然有Python2的功勞,也有Python基於時過境遷進行的“蛻變”。

 

Python 3-未來

 

隨著算力的不斷增強,計算平臺發生變遷,Python這條“巨蟒”在新的執行環境中,逐漸變得力有不逮。

2008年,為了修復缺陷,更好地適應新環境,讓Python更有生命力,Python社群做了一個非常有決斷的動作:

推出python3,不向後相容

 

當時給Python 2.7定下的Deadline是2015年。因為擔心大量現有程式碼無法遷移到Python 3,這一時間又推遲到了2020年。

這背後長痛不如短痛的想法,輕裝前行的理念等等, 大部分開發者都理解。

而且,這也為Python贏得了不少使用場景,最典型的就是成為了機器學習這一熱門領域的寵兒。

谷歌的TensorFlow使用的就是Python。Facebook更直接,從PyTorch的名字來看就知道它和Python密不可分的聯絡。

 

但版本割裂帶來的陣痛,還是成為了Python被詬病的一大重點。雖然Python也釋出了程式,幫助開發者更好地將Python 2程式碼轉換為Python 3。

但這也讓不少人糾結與徘徊,更有對手看到了機會,而且來勢洶洶。

 

比如谷歌2009年正式推出的Go,更是“明目張膽”地搶人——開發一款從Python 2.7到Go語言的編譯器。

還有Julia。這一源自MIT的新程式語言,創建於Python 3釋出第二年,2012年公開發布。

主要的應用領域為資料分析、機器學習、物理學、數學、人工智慧、訊號與影象處理等等。

而這些,都是當下Python發揮作用、面向未來的核心陣地。不過,Python也沒有停下來發展的腳步,也在不斷推陳出新,面向未來程式設計。

 

比如PyPy的不斷優化,SciPy和NumPy的不斷完善等等,都在放大Python的能量。

現在,Python辭舊的倒計時已經掛起。

這個起於20世紀80年代一個業餘專案的語言,到現在仍舊具備超強生命力,相容幷包,成為開發者手中的利器,不斷吞噬世界。

 

 

Python 2,感謝你多年來的忠實服務。

Python 3,現在是你的時代。