就因為unicode,python3肯定能變成主流在3.0時代我已經開始轉向python3來寫自己用的各種腳本了,因為python2.x的中文編碼太糾結了。不過目前python3的庫還是太少,雖然越來越多的庫開始支持了。另外,我寫過gae程序,用的python2.5,用著非常不順手。個人認為接下來一兩年還是python2.6/2.7用得最廣泛,但終將被3.x所取代。我是看好3.x的發展的。謝@胡小櫻邀,受寵若驚。python嘛我兩個版本都在用,主要用python2?,F在大多數項目都是構建在python2之上的吧,osx自帶的python解釋器也是2。個人感覺3和2用起來的主要區別就是encoding問題終于解決了,默認unicode了。就憑這一點,處理非英語字符串的時候方便好多好多。之前寫一個通過adb向androidapp發送消息的腳本的時候,python2的中文字符串encode/decode出了好多奇奇怪怪的問題(比如說特定字符轉換錯誤,別的字符都正常),至今無解,讓我很無奈。另外一個改變是print終于變成函數了,這和其他語言保持了一致。要從python2遷移到3,最大的問題在于很多被廣泛應用的庫改名、合并、改動,比如說2時代被廣泛用來做爬蟲的urllib2。網上搜索一下python爬蟲,99%的文章都在介紹urllib2的用法;但是python3里面urllib2被合并到urllib,接口什么的都不一樣了,我也沒找到任何關于遷移方法的文檔。python開發團隊對于2和3的態度也是3難以推進的理由之一。兩個版本并行開發,這不是明擺著讓版本分裂愈演愈烈嗎?不如早點學微軟把python2砍掉,長痛不如短痛,開發團隊也免去了同時搞兩個版本的麻煩。我看好python4如果你的工作和文本處理相關得多,那么還是推薦3啊..2.x的中文處理讓你欲仙欲死
初學python的人在選擇python版本的時候或許都會存在一些疑惑,到底選python2還是python3呢?或者更精確的說,是python2.7還是3.3呢(這兩個版本是目前的主流)?這兩個版本有什么不同?最近一段時間我在谷歌和so上看了很多人的觀點,特地來總結一下,或許能解答此時此刻你心中的疑惑。
維基百科在python2.7和3.3這兩個版本的不同上給出了非常詳細的解答。用這兩個版本都各有好處,這取決于你想要得到什么。但是,總體來說“python2.xislegacy,python3.xisthepresentandfutureofthelanguage”
關于最主要的區別,或者說最明顯的區別,就是print函數了,在py2中,我們直接可以print“helloworld!”,但是在py3中的語法是print(“helloworld!”)。
另外,py2有更好的庫函數的支持,很多庫只支持py2而不支持py3。所以這是選擇python2的一個非常強大的優勢。
但是許多人,包括許多python的開發者都是堅定不移的py3支持者,archlinux也采用py3為默認版本。為什么呢?因為python3才是符合未來潮流的版本,越來越多的新特性只會支持py3,這樣就顯得py2有點停滯不前。py3才是未來的主流。
那么說了這么多,作為一個初學者,抑或是一個開發者,怎樣選擇python的版本呢?我覺得so上的一個回答說得非常好:
“python3isanicerandmoreconsistentlanguage,but,thereisverylimitedthird-partymodulesupportforit.thisislikelytobetrueforatleastacoupleofyearsmore.so,allmajorframeworksstillrunonpython2,andwillcontinuetodosoforasignificanttime.therefore,ifyoulearnpythontoday,youshouldlearnpython2,becausethatistheversionyouaregoingtoendupactuallyusing.”
翻譯:“python3是一個更棒更持久的語言,但是,支持它的第三方庫很有限。這種情況很可能在未來的幾年一直持續下去。所以,幾乎所有的框架在現在以及未來的一段時間內都會在py2上運行。因此如果你是一個初學者,那么你應該學python2,因為那才是你最終要用的?!?/p>
雖然這個人給出了選擇py2的答案,但是最終的決定權還是在你手中,畢竟這是一個沒有定論的答案。
3.0肯定沒人用的,現在的3.x的最新release已經是3.2了http://python.org/download/releases/3.2/我個人可能會等到3.3正式release開始嘗試使用python3.x進入production至少也要等到常用的庫都支持python3.x之后不存在看好不看好的問題,3是大勢所趨,不過主流的庫都還不支持3。等django,mysqldb都支持了,用3的時代也就到來了。反正2.7是2.x的最后一個版本。這和看好不看好有什么關系?python3的不向下兼容是python發展的揚棄的結果。非常決絕有力的決定,給python注入了更強的生命力??脊抨犕诘囊皇趾脡?=如果是當時提問的時間點的話(2011-03-23),我對python3持悲觀態度,因為那時候的python3版本是3.2,最最蛋疼的是unicode的u前綴字符串在python3是syntaxerror,我知道這些小事可以在2to3中自動修復,但是相當多的人,至少包括我和sqlalchemy的作者,都非常不喜歡2to3,我是認為2to3干涉了我對代碼的控制,出了問題還要看是我的問題還是2to3自己的問題,單元測試加上2to3什么的麻煩死了,而且在最近的sqlalchemy0.9的what’snew中相當高調的提到了targetingpython2.6andupnow,python3without2to3what’snewinsqlalchemy0.9?這一點的順序甚至高于更有實質意義的cextensionssupportedonpython3,當然你也可以理解為重要的是2.6+這一點第二蛋疼的是python2.7幾乎有所有的python3.0~3.2的新功能的backport,這樣你讓我有什么動力去用python3呢?而且當時n多庫不相容,尤其是paramiko,到現在還不相容,又不像mysqldb有替代-_-|||,上層的fabric也被牽連不過3.3之后非常不同了,首先最最蛋疼的u””的syntaxerror沒有了,然后終于有新特性了有木有,generatordelegation功能讓我流口水( ̄﹁ ̄),當然純粹給generator用有點大才小用,果不其然,3.4(現在還在rc階段)的asyncio就用的是這種新語法( ̄﹁ ̄)失態了。。。在3.3發布后我才終于有動力修改我的代碼,準備python3的相容性等待遷移,當然。。。雖然unittest都過了還是要觀望一下-_-