Python 2 or Python 3

這是一個風口浪尖的話題,我本不願意參與這種無意義的論戰,但是由於一系列關於新書《Python Web開發實戰》的私信、留言、群討論中,提及最多的問題竟然是「這個書是基於Python 2還是基於Python 3?」!實在崩潰,我還是寫篇文章直接闡述下我的觀點吧。

上周在公眾號《編程派》的「薦書 | 跟著豆瓣工程師學Web開發」的留言中我的回復如下:

編程重在編程思想的理解和經驗積累,語法其實只是表達方式而已,Python 2/3思想是相通的,只有少量語法差別和不兼容. 對Python熟悉到一定程度可以在很短時間寫Python 3。書中還說了更細的選擇建議。

我們首先看看Python 2 和 Python 3有什麼不一樣(其實就是看「What』s New In Python 3.X」):

1. 一些歷史遺留或一開始的設計思路等原因造成的問題在Python 3獲得了一些改善,改動/刪除了一些語法,但是也存在了一些和Python 2的不兼容。

2. 增加了一些新特性和語法,比如asyncio。

3. 添加/刪除/移動了一些標準庫。有些第三方庫被合併進了標準庫,比如pip、venv、enum。

其實就這三條吧?有的人說了:「哎呀,至今搞不懂Python 2的unicode、string、bytes、中文的編碼... 」這就是你沒學好好吧,怪Python 2伐?

對於業務來說,這些改變並不足以說服大家要遷移到Python 3,我個人關心的有幾點:

1. 新的特性和語法有沒有對現有開發模式產生足夠積極作用。

2. 性能有沒有提高的足夠多。

3. 遷移成本是不是可以接受。

目前國內,我也沒聽過那些公司或者大的產品正在遷移或者已經遷移到Python 3,其實說白了,就是Python 3沒有讓大家足夠動心。Python 2會維護到2020年,但是不代表2020年之後Python 2就不能用了,那你讓那些跑了可能10多年,幾十萬行代碼的項目必須遷移么?其實最多就是在新的項目上用Python 3,老的項目還是維持現狀。所以,Python 2在至少未來10年都會有市場的。如果你有幸維護這樣的老項目,還既要求你會Python 2也要求你會Python 3,甚至寫Python 2/3兼容的代碼呢。

不可否認,Python 3是未來!很多庫都在遷移,但是注意哦,他們是Python 2/Python 3兼容,不是直接幹掉Python 2的支持,雖然未來會有一天像現在的一些項目放棄Python 2.5的支持一樣放棄Python 2。庫和實際公司的項目不同,驅動力和項目代碼級別差別很大,要是個幾千行的項目,我們一會就遷移完了,但是動輒上百萬行的項目,我們怎麼獲得pm和boss的支持呢?所以我堅信未來在大型的項目中有相當長的一段時間會是在2/3兼容的Python代碼

會Python的人,Python 2和Python 3都會寫。我很好奇現在的人,不去學習Python,一直在糾結「Python 2 or Python 3」這種話題。其實現在隨便學習Python 2和Python 3,不用等2020年就可以隨便寫Python 2/3的代碼了。有的人又問了:「既然Python 2終將死去,為啥現在還要學習那些未來會被淘汰的語法和內容」,因為時間還不到,潮流還沒來,仔細對比Python 3的淘汰語法和內容,我發現平時工作中常用的,對編程習慣有影響的是很少的,也花不了你幾個小時...

在我寫書開始,編輯就問過我「你這本書是基於Python 2還是Python 3的啊?如果是Python 3還是個賣點呢」,我說外行人就會這麼問... 我當時的回答是「如果現在是2019年或者更晚,這本書絕對是全部使用Python 3完成的,但是現在是2016,這本書的內容是給開發者實際在工作中用的,別因為使用Python 3寫,讀者拿回去公司由於在用Python 2而不能直接用...」

扯了這麼多,上建議:

1. 如果你Python已經有了一定基礎,學習Python 2和Python 3兼容的寫法,經常留意和鞏固Python 2和Python 3的那些不同的地方,多積累2to3的經驗,在自己的項目中練習Python 3。

2. 工作中用的某些模塊或者庫還不支持Python 3,又沒有精力、能力和排期完成兼容,首選Python 2。

2. 如果你現在初學Python,首選Python 2。如果你看這篇文章的時候已經是2018年或者更晚,首選Python 3。

希望看完本文的讀者,之後再也不討論和關注這類問題,而是just do it。

評論區淪陷,然而我堅持我的建議,愛聽不聽,關閉吵鬧的評論區了。

無恥的廣告:《Python Web開發實戰》上市了!

歡迎關注本人的微信公眾號獲取更多Python相關的內容(也可以直接搜索「Python之美」):


推薦閱讀:

python那麼多庫,學的時候是怎麼記住的呢?
高效靈活的概率建模方法基於Python
Python利器之胎教《唐詩三百首》文本分析

TAG:Python | Web开发 | Python入门 |