標籤:

應該學習最新版本的 Python 3 還是舊版本的 Python 2.7?

看到市面上有很多新的版本,很多細節都不同,語法也過時了,不知道該如何選擇?


自己玩或者學習,可以選擇Python3.X,畢竟新東西是趨勢

如果是公司重要項目,選擇Python2.7穩重,如果是不太重要的可以選擇用新版本

注意:

語言是人和機器的溝通工具,目的也是表達你的意思給計算機,不管是Python2.X還是Python3.X都行,需要重點了解人如何讓機器按照自己的意識去工作(思路、想法)


先強調一點,Python2和Python3的差別,大概倆小時就可以完全掌握,所以版本並不是重要問題

如果一定要選一個版本,看你現在或者以後要去的公司,用的什麼版本,你就學什麼版本

如果沒有明確的目標,現在開始學的話,建議從Python3開始學,雖然我也一直用2.7,但是以後的潮流還是Python3的世界

最後,剛開始學打dota的,不要糾結於你的電腦CPU是i5還是i7的,都是好東西,而且之間的差別對新手並沒有影響

最怕的就是糾結於選擇i5還是i7,糾結了一個月,還沒有開始啟動dota,最終只能看別人超神,自己繼續糾結


黃哥經常說的,學習編程不是學習語法,是學習解決問題的方法。

Python 3 和python 2 都姓「Python 」, 之間的差別沒有Python 和Java之間差別大。

學習Python 3 和 2 都可以。

如果著急找工作,先通過學習Python 2 學習編程。

不急於找工作,學習Python 3


這裡可以看到現在PyPi的絕大多數排名靠前的庫都支持Python 3了:

https://python3wos.mybluemix.net/

在Google搜:PYTHON 3 WALL OF SUPERPOWERS 的結果,哈哈哈哈

時光回到2008年,許多人引頸期盼的新功能,包括在新出爐的Python 3.0(也被稱為Python 3000或Py3K)中,其中最引人注目的是Unicode的支援,將str/unicode做了個統合,並明確地提供了另一個bytes類型,解決了許多人處理字元編碼的問題,然而,其他語法與程序庫方面的變更,也破壞了向後相容性,導致許多基於Python 2. x的程序,無法直接在Python 3.0的環境中運行。

對程序語言而言,破壞向後相容性是條險路,歷史上少有語言能走這條路而獲得成功。許多語言都小心翼翼地在推出新版的同時,兼顧向後相容,代表之一就是Java,開發者雖然樂見既有的程序資產,在新版Java上運作(幾乎)都沒有問題,然後,代價就是越來越肥大的語言,而一些在其他語言看似不錯的特性,為了符合向後相容性保證,因而做了畸形地調整而出現在Java中,這使得處理一件任務時錯誤與正確的做法越來越多,同時並存於語言之中。

從這個層面來看,Python 3.0選擇破壞相容性,基本上是可以理解的,而Python 3.0演進的指導原則,正是「將處理事情的老方法移除,以減少特性的重複」,這符合PEP 20的規範,就是Python哲學中「做事時應該只有一種(也許也是唯一)明確的方式」之條目。

擁有著BDFL(Benevolent Dictator For Life),也就是「仁慈獨裁者」的Python創建者Guido van Rossum,也一路持續地推動著Python 3.x系列的前進,並逐步降低對Python 2.x的支援— —Python 2.7是2.x最後一個版本,不再加入新特性,只會提供臭蟲與安全更新,而且僅支援至2020年,這是Guido van Rossum的最愛,而這種專制的推動,確實也符合仁慈獨裁者這個名號。

然而,從Python 3.0推出到現在,不斷地都有入門者在問,我要學Python 3.x,還是Python 2.x?由於難以選擇,許多介紹文件或書借,也不得不同時介紹2.x與3.x兩個版本(像是OReilly那1600多頁的《Learning Python》);儘管有2to3這個工具可以轉換程序碼,它也不能發現所有的問題;漸漸地,也開始有了〈Python 3 is killing Python〉這類的文章出現,預測著Python社群將會分裂,甚至既有擁護者將會離開Python。

儘管破壞向後相容性的語言,多半不會有什麼好的結果,然而,就這幾年來Python 3.x與2.x的發展來看,過程與那些失敗了的語言不太一樣,社群中接受與呼籲Python 3.x的聲音也越來越多,Python本身也以每隔一年左右推出一個3.x版本前進著,過程似乎也並不是官方一廂情願地推進,而是不斷地傾聽著社群聲音,不斷地為相容轉換做出了努力。

首先眾所皆知的,如果想在Python 2.x中就開始使用Python 3.x的一些特性,可以試著from __future__ import你想要的模組,例如最基本的from __future__ import print_function,就可以開始使用print函式,以相容方式來撰寫輸出陳述。

在Python官方的〈Python2orPython3〉也整理了許多相容轉換的相關資源,其中指出,Python 3.0的一些較不具破壞性的特性,回饋(backport)到Python 2.6之中,而Python 3.1的特性,回饋到了Python 2.7之中;回饋也反過來從2.x至3.x,例如,在Python 3.3中又支援了u"foo"來表示unicode字串,b"foo"來表示byte字串,相容性同時在2.x與3.x之間前進著,試著讓語法有更多交集。

Python 3.x本身也不斷地吸納社群經驗,舉例來說,Python 3.3中包含了venv,相當於過去社群用來建立虛擬環境的virtualenv工具;Python 3.4本身就包含了pip,這是過去社群中,建議用來安裝Python相關模組的工具;Python 3.5更納入了type hints,儘管它本身是個動態定型語言,然而,這特性有助於靜態分析、重構、執行時期類型檢查,對大型專案開發有顯著的幫助,而且對既有程序碼不會有影響。

儘管Python 3.x本身不斷在相容性與新特性上,釋出利多(有機會應該好好看看各版本的Release資訊),社群不買單的話,基本上也是徒勞無功。

實際上就學習Python本身來說,以2.x與3.x作為開始,並不是太大的問題,就現代開發者而言,接觸多個語言本來就是常態,更何況是在2.x與3.x交集如此多的Python之中,學習或轉換本身並不是難事。

然而,一個現實的問題是,新系統要開發時,究竟要基於Python 2.x或是Python 3.x?最好的方式是寫出能同時相容於2.x與3.x版本上的程序碼,除了要建立良好的程序碼慣例之外,社群中還有著six這類的套件,可以寫出相容2.7和3的程序碼基礎。

想要知道其他程序庫是否有支援Python 3.x,有個〈PYTHON 3 WALL OF SUPERPOWERS〉,可以作為不錯的參考,其中列出了200個程序庫,174個標示為綠色,表示支援Python 3. x,在2014年左右,仍有35個被標示為不支援Python 3.x的紅色,目前則只剩下26個程序庫是紅色狀態。

另一方面,著名的Linux系統,目前多半也同時預載了Python 2.x與3.x,例如Ubuntu從13.04起,就預載了Python 3.x(必須使用python3指令),Ubuntu也持續移除系統中對Python 2.x的依賴,並計畫於16.04版本中,能夠全面採用Python 3.x,而且不再預載Python 2.x。

不再是2008年的Python 3.0

曾有人說過,Guido van Rossum最大的問題,就是沒有斷然處置Python 2.x,還讓2.7持續維護至2020年,因而造成在抉擇2.x或3.x時如此多的問題,不過,2008年到現在,持續在相容性與接納社群意見上做出的努力,看來社群似乎因為有了這七年的時間,才得以逐步轉換,提高了Python 3.x的接受度。

當然,有些程序庫確實還死守在Python 2.x,而且有些甚至還聲明,未來絕不會有支援3.x的版本,然而,這並不表示現在回應「Python 2.x與3.x,我要學(用)哪個?」這類問題時,還只是像2008年剛開始的那時,能不假思索地脫口而出「因為許多程序庫還不支援Python 3,所以建議還是學(用)Python 2. x好了」。

現在的Python 3.x畢竟不再是2008年的Python 3.0了,正如在選擇一門語言,或者是調查某個程序庫是否可以採用時,必須有著諸多考量,像是更新(update)的時間、修改記錄(changelog)、修正問題(issue)的速率、作者等,現在選擇使用Python 2.x或是Python 3.x,最好的方式是做更全面的調查、尋找、評估可靠的資源。

畢竟,「許多程序庫還不支援Python 3」這理由,就現今而言已經太草率了,所謂的許多程序庫,到底是哪些程序庫呢?而你的「許多」又是哪個年代的「許多」呢?

from:Python 2.x或3.x?


似乎每個學python的初學者都喜歡問這個問題,我當初也一樣。反過來想想,為什麼問這個問題的都是初學者呢?沒見過玩python很資深的人問版本的問題。總結下我理解的原因

1:對學習python沒有安全感,擔心學錯了版本,用不上白學了。 這點焦慮大可不必。python2,3確實有區別,但作為初學者,打好基礎才是最重要的,還沒到考慮區別的階段

2:關於python2.7 和python3.0的使用範圍的擔心。目前是有一些公司生產環境用python3,但python2.7目前仍然是主流。不用擔心學了2.7找不到工作

拋開上面的焦慮,如果要學習就選擇資料最多,最容易上手的版本來學,坦白講目前能找到的資料。python2.7是最多的,遇到問題搜到的答案也最多。


都2017年了,還學2幹嘛。


還是2.7,現在很多穩定的平台都是2.7 Ubuntu14.04 Centos7 等等...

學習沒有新舊之分,會基礎的都通 51reboot/actual-timetable 比較基礎的,可以看看


如果要論學習的話, python2 與python3 語法的區別並不是很大,

現在目前大部分的企業中使用的還是python2,python2的模塊也非常豐富,以後肯定是以python3為主,


推薦閱讀:

TAG:Python入門 |