你看好 Python 3 嗎?

來源:互聯網
上載者:User

回複內容:

就因為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 Team Dev對於 2 和 3 的態度也是 3 難以推進的理由之一。兩個版本並行開發,這不是明擺著讓版本分裂愈演愈烈嗎?不如早點學微軟把 Python 2 砍掉,長痛不如短痛,Team Dev也免去了同時搞兩個版本的麻煩。我看好python4如果你的工作和文本處理相關得多,那麼還是推薦3啊..
2.X的中文處理讓你欲仙欲死

初學python的人在選擇python版本的時候或許都會存在一些疑惑,到底選python2還是python3呢?或者更精確的說,是python2.7還是3.3呢(這兩個版本是目前的主流)?這兩個版本有什麼不同?最近一段時間我在Google和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 2to3
What’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 發布後我才終於有動力修改My Code,準備 Python 3 的相容性等待遷移,當然。。。雖然unittest都過了還是要觀望一下-_-|||
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.