Python 3 正在毀滅 Python 嗎?

... Python 2最重要的一個優勢在於擁有眾多的第三方庫,可以用來做任何事情,但是Python 3沒有這個優勢。誠然,有很多的庫已經移植到Python 3了,但是有更多的庫沒有移植,也不容易移植。例如,你需要解析 X,但是X不像YAML和JSON那樣容易解析。很可能有一個第三方的解析器可供選擇,但是只可以用Python 2,而沒有針對Python 3的移植版本。此外,加之Python 2中的位元組字元串(str)和Python 3 中的位元組字元串(bytes)之間有著功能上的差異,使得這更難移植。而事實上,移植它非常困難,並且需要很多的小技巧(trick)來兼容Python 2和Python 3。所以,你有兩種選擇,要麼使用Python 2 (已經不建議使用的語言)快速的開發你的程序,但這會花費你十倍以上的時間去移植相關的庫(以及所有的依賴)。要麼,使用另一門同樣擁有很多庫的編程語言,但是不用再困擾於Python 2 / 3之間的問題。第二種選擇顯然不受歡迎,因為如果我們這樣做了,在我們的生產環境中已經有很多Python 3的程序了並且大部分Python 2的庫需要被移植。不管這些情況是否存在,人們要麼繼續使用Python 2開發程序,要麼選擇另一門不會打自己臉的語言...

文章鏈接:Python 3 正在毀滅 Python


謝邀。先總結一下該文觀點

  1. Python 2.x的優勢在於擁有眾多的第三方庫,雖然有很多庫已經移植到Python 3.x,但也有很多沒有移植,而且有很多庫很難移植。
  2. 已有的Python 2.x項目可以無縫移植到Python 2.x的新版本上,而移植到Python 3.x上將更難,需要花費更多的人力物力。
  3. 大多數比較受歡迎並且支持兼容Python 2和Python3的庫是通過運行在各自平台上的語言子集(subset)來寫的。
  4. 最好的辦法是Fork 2.7製作2.8,但官方卻不支持這種做法。

該文作者說得很有道理,但我覺得Python 3.x並不會毀滅Python,會令Python社區變得更好。

  1. 第三方庫現在越來越多庫已經轉向兼容Python 3.x,看PyPI上的列表https://pypi.python.org/pypi?:action=browsec=533show=all。是有些庫使用了所謂語言子集來實現兼容Python 2 3,或者是使用six這個module來幫助處理跨Py2和Py3的兼容問題,這些有可能會影響效率,但是,對於整個程序而言,相信核心模塊的演算法優化帶來的性能提升會遠大於這些損失。而且有2to3.py這個腳本可以幫助轉換生成Py3 Only的腳本來發布,完全可以做到自動化。
  2. 如果是現有的項目,相信很多都還處理Py 2.4-2.6的階段吧,相信連Py 2.7都不會到,何況更新的庫。這些老舊代碼,相信有一些庫的升級版也不一定能支持到&<=Py2.5了吧。老的服務就讓它持續運行下去,沒有必要非要對它動刀。要是真的想要升級,其實無論如何都會引起重構的了,那是要選擇稍作修改,重用絕大部分的Python兼容代碼,移植到Python 3,還是直接換一種語言,從頭來過,就是總監要想的問題了。
  3. Python 3把bytes和str的行為分開,是一件好事,終於把一個歷史遺留下來的錯誤fix了,居然有人說不好?
  4. Python 3每次升級都會帶來新的stdlib,會fix掉一些錯誤,還可能會加入新的語法。比如Python 3.4.x裡面新的asyncio庫,最愛!

舊的項目,stays in Python 2。若你要開啟一個新的項目,Why not choose Python 3?


新生代py程序員可能更願意用py3,各種教輔資料也會慢慢轉向py3。py2到3就是進步,C語言還幾十年幾乎不變呢。向下兼容可能成為發展的阻礙,看看Windows。Python依然是主流語言,隨著py2停滯開發,py3必然會慢慢替代py2,不斷加入新特性和修復以前的設計錯誤,使之成為更好用的工具。不能因為你習慣2,不想接受新東西就排斥3,沒好處的,就像WinXP與win7,新軟硬體很多已不再支持XP


不會,python3隻會毀滅python2,因為這本就是它出現的意義


Python 3的原罪就在於break了back compatibility,並且沒有成功的說服開發者為什麼他們需要遷移到Python 3上來。

但要說Python 3會殺死Python我覺得實在是言過其實,Python的生態系統擺在那裡,可能在一些方面被其他語言和技術超過,但是總體而言地位依然是穩固的,畢竟在大多數應用場景下,它的性能並不是一個大的問題。

不過負面影響總是存在的。Python 2.x於3.x這個膠著的狀態,在社區造成了很大的分歧。而這個分歧拖下去的時間越長,對於Python未來的發展就越不利。為什麼呢?因為其他競爭對手都在快速的演進。例如在最重要的web開發領域,node.js和Go正在吸引越來越多的注意力。特別是Go,syntax和Python差別不大,out-of-box的性能卻高了不止一個數量級。這促使不少的開發者,尤其是那種願意嘗試新技術並且廣為傳播的(所謂的evangelist),在面對2to3這個選擇的時候,索性直接將整個技術棧換成Go。

個人而言,為什麼不願意遷移到Python 3呢?一句話:Python 2 just works。Python 3缺乏讓人眼前一亮,想要躍躍欲試的feature upgrade。


Python3 開發了6年,毫無建樹。Python3沒有革命性的創新,又不向下兼容。
照這樣折騰下去Python真的要滅亡了。

反觀PHP這幾年一直在蓬勃發展,命名空間,包管理,HHVM,PHPng,還有非同步並行的Swoole。曾經Python說自己是下一個PHP。結果呢。。。

其他語言如Golang,Node.js也逐漸火起來了。Python還是那樣不溫不火。可以說Python3這6年真的是致命錯誤。


因為我在c++界混了那麼多年所以我很吊,所以你們該聽我說說話:
python的優勢就是庫多,我能快速抄襲別人的庫,從而瞬間開發。
然而python3不兼容我用的庫。
什麼,你說移植?那種臟活累活怎麼能讓我這麼有經驗,這麼高貴優雅的人去干!!!
我建議你們趕緊fork出來一個我能繼續用的版本,最好啥也不改,以便於我即能什麼都不用改我的碼,又能聲稱我用的是最新版本,以便裝逼
其他人的建議都不值一提,你們要是不聽我的,就會死的跟perl社區一樣慘。
——作者精神概要


python3當初最正確的模式難道不是支持import python2的庫,保持import方面的兼容性,但是python3源文件里只允許python3的語法?確實不兼容的地方,提供轉換層來讓調用者使用,這樣就可以直接使用大量python2庫,又能推進語言演化。


相反,python3 在很多方面比python2更易開發,特別是unicode和bytes,但是確無革命性革新。將python2的代碼遷移到python3是非常痛苦的過程。所以最好的策略是舊的如無必要繼續用python2,擔慢慢往python2.7上靠,新項目用python3。個人感覺python3最近語言方面進步緩慢,弄個asyncio庫還像個半成品。這也和python的核心開發團隊有關,python是社區模式,而其他都是 專職團隊。type hints只是解決了有無而對性能完全沒幫助,多一些語法糖並不能本質性使python3更好。只能說python3比python2好那麼一些,但是並無殺手級應用,優勢不明顯。現在用python3的好處是至少問題開發人員還願意fix,而python2的萬年問題仍然在list上。


新手學,干下哪個版本啊?


1 C++是一個和C完全不同的語言,但是它向下兼容C
2 看不出Python3有任何理由不兼容Python2的語法。因此,唯一可以解釋的,就是Python官方希望像一個獨裁者一樣領導社區,「反對我的都去死」。 那麼社區的回應就是「獨裁者去死」。
3 Python3對於Python2的語言特性優勢,根本不足以打動Python2社區。
4 既然Python開源,而且版許可權制比GPL還弱, 那麼一旦Python官方停止對2.x的支持,一定會有社區自發維護的版本,不會比官方做得差。
5 既然得罪了社區,那麼得到的回應就會有很多開發者抵制Python3,堅決不會將他們開發的庫升級到3


推薦閱讀:

網路上傳聞的Shadow Web是不是真的?為什麼存在這麼多的恐怖經歷?
在假定windows系統沒有綁定瀏覽器的情況下,有什麼辦法訪問指定站點down一個瀏覽器?
現在仍然活躍的應用層協議有哪些?
RSA-4096?
為什麼SSL證書的價格相差那麼大呢?即使加密強度一樣,同樣只是顯示綠色鎖的標誌,並沒有帶機構名的綠條

TAG:程序員 | 編程語言 | Python | 編程 | 計算機 |