回覆列表
-
1 # lovestar251
-
2 # 程式設計師小高學習筆記
Python 3與Python2在很多地方不一致的語法和內容,讓很多程式設計師都叫苦不迭。很多人都以為Python2會和3一起走下去。
但現實是,Python2被停止支援了。大量的庫正在或已經遷移到了Python 3,除非那些已經沒人維護的庫了。
Python3 不是因為人工智慧而火,因為你如果看過人工智慧的課程或書籍就會發現很多作者都選擇了Python2作為Python版本。
但,Python 3 是 Python小組推薦的,也是時代的選擇。至少,使用Python3不會因為一些中文符號或者其他的Unicode符號而小心翼翼的處理。
簡單的來講,在2已經被迫隱退,4還沒訊息的今天,3是無法替代的。
-
3 # Lucifer351
在 3.0 時代我已經開始轉向 Python 3 來寫自己用的各種指令碼了,因為 Python 2.x 的中文編碼太糾結了。不過目前 Python 3 的庫還是太少,雖然越來越多的庫開始支援了。另外,我寫過 GAE 程式,用的 Python 2.5,用著非常不順手。個人認為接下來一兩年還是 Python 2.6/2.7 用得最廣泛,但終將被 3.x 所取代。我是看好 3.x 的發展的
就因為unicode,python3肯定能變成主流在 3.0 時代我已經開始轉向 python 3 來寫自己用的各種指令碼了,因為 python 2.x 的中文編碼太糾結了。不過目前 python 3 的庫還是太少,雖然越來越多的庫開始支援了。另外,我寫過 gae 程式,用的 python 2.5,用著非常不順手。個人認為接下來一兩年還是 python 2.6/2.7 用得最廣泛,但終將被 3.x 所取代。我是看好 3.x 的發展的。謝@胡小櫻 邀,受寵若驚。python 嘛我兩個版本都在用,主要用 python 2。現在大多數專案都是構建在 python 2 之上的吧,os x 自帶的 python 直譯器也是 2。個人感覺 3 和 2 用起來的主要區別就是 encoding 問題終於解決了,預設 unicode 了。就憑這一點,處理非英語字串的時候方便好多好多。之前寫一個通過 adb 向 android app 傳送訊息的指令碼的時候,python 2 的中文字串 encode/decode 出了好多奇奇怪怪的問題(比如說特定字元轉換錯誤,別的字元都正常),至今無解,讓我很無奈。另外一個改變是 print 終於變成函數了,這和其他語言保持了一致。要從 python 2 遷移到 3,最大的問題在於很多被廣泛應用的庫改名、合併、改動,比如說 2 時代被廣泛用來做爬蟲的 urllib2。網上搜索一下 python 爬蟲,99% 的文章都在介紹 urllib2 的用法;但是 python 3 裡面 urllib2 被合併到 urllib,介面什麼的都不一樣了,我也沒找到任何關於遷移方法的文件。python 開發團隊對於 2 和 3 的態度也是 3 難以推進的理由之一。兩個版本並行開發,這不是明擺著讓版本分裂愈演愈烈嗎?不如早點學微軟把 python 2 砍掉,長痛不如短痛,開發團隊也免去了同時搞兩個版本的麻煩。我看好python4如果你的工作和文字處理相關得多,那麼還是推薦3啊..2.x的中文處理讓你欲仙欲死
初學python的人在選擇python版本的時候或許都會存在一些疑惑,到底選python2還是python3呢?或者更精確的說,是python2.7還是3.3呢(這兩個版本是目前的主流)?這兩個版本有什麼不同?最近一段時間我在谷歌和so上看了很多人的觀點,特地來總結一下,或許能解答此時此刻你心中的疑惑。
維基百科在python2.7和3.3這兩個版本的不同上給出了非常詳細的解答。用這兩個版本都各有好處,這取決於你想要得到什麼。但是,總體來說“python 2.x is legacy, python 3.x is the present and future of the language”
關於最主要的區別,或者說最明顯的區別,就是print函數了,在py2中,我們直接可以print “hello world!”,但是在py3中的語法是print (“hello world!”)。
另外,py2有更好的庫函式的支援,很多庫只支援py2而不支援py3。所以這是選擇python2的一個非常強大的優勢。
但是許多人,包括許多python的開發者都是堅定不移的py3支持者,archlinux也採用py3為預設版本。為什麼呢?因為python3才是符合未來潮流的版本,越來越多的新特性只會支援py3,這樣就顯得py2有點停滯不前。py3才是未來的主流。
那麼說了這麼多,作為一個初學者,抑或是一個開發者,怎樣選擇python的版本呢?我覺得so上的一個回答說得非常好:
“python 3 is a nicer and more consistent language, but, there is very limited third-party module support for it. this is likely to be true for at least a couple of years more. so, all major frameworks still run on python 2, and will continue to do so for a significant time. therefore, if you learn python today, you should learn python 2, because that is the version you are going to end up actually using.”
翻譯:“python3 是一個更棒更持久的語言,但是,支援它的第三方庫很有限。這種情況很可能在未來的幾年一直持續下去。所以,幾乎所有的框架在現在以及未來的一段時間內都會在py2上執行。因此如果你是一個初學者,那麼你應該學python2,因為那才是你最終要用的。”
雖然這個人給出了選擇py2的答案,但是最終的決定權還是在你手中,畢竟這是一個沒有定論的答案。
3.0肯定沒人用的,現在的3.x的最新release已經是3.2 了 http://python.org/download/releases/3.2/我個人可能會等到3.3正式release開始嘗試使用python 3.x進入production 至少也要等到常用的庫都支援python 3.x之後不存在看好不看好的問題,3是大勢所趨,不過主流的庫都還不支援3。等django,mysqldb都支援了,用3的時代也就到來了。反正2.7是2.x的最後一個版本。這和看好不看好有什麼關係?python3的不向下相容是python發展的揚棄的結果。非常決絕有力的決定,給python注入了更強的生命力。考古隊挖的一手好墳= =如果是當時提問的時間點的話(2011-03-23),我對 python 3 持悲觀態度,因為那時候的python 3版本是3.2,最最蛋疼的是unicode的u字首字串在python 3是syntaxerror,我知道這些小事可以在 2to3 中自動修復,但是相當多的人,至少包括我和sqlalchemy的作者,都非常不喜歡2to3,我是認為 2to3 干涉了我對程式碼的控制,出了問題還要看是我的問題還是 2to3 自己的問題,單元測試加上 2to3 什麼的麻煩死了,而且在最近的 sqlalchemy 0.9 的 what’s new 中相當高調的提到了targeting python 2.6 and up now, python 3 without 2to3what’s new in sqlalchemy 0.9?這一點的順序甚至高於更有實質意義的 c extensions supported on python 3,當然你也可以理解為重要的是 2.6+這一點第二蛋疼的是 python 2.7 幾乎有所有的 python 3.0 ~ 3.2 的新功能的 backport ,這樣你讓我有什麼動力去用python 3 呢?而且當時 n 多庫不相容,尤其是 paramiko ,到現在還不相容,又不像 mysqldb 有替代-_-||| ,上層的 fabric 也被牽連不過3.3之後非常不同了,首先最最蛋疼的 u”” 的 syntaxerror 沒有了,然後終於有新特性了有木有,generator delegation 功能讓我流口水( ̄﹁ ̄),當然純粹給generator用有點大才小用,果不其然,3.4 (現在還在rc階段) 的 asyncio 就用的是這種新語法 ( ̄﹁ ̄) 失態了。。。在 3.3 釋出後我才終於有動力修改我的程式碼,準備 python 3 的相容性等待遷移,當然。。。雖然unittest都過了還是要觀望一下-_-|||