應該學習最新版本的 Python 3 仍是舊版本的 Python 2?

應該學習最新版本的 Python 3 仍是舊版本的 Python 2?

看到最新Python版本是3.4,可是網上的資料,包括出版的書籍,都是最晚到13年左右,不少細節都不一樣,語法也過期了。

那此時應該直接學習3.X仍是2.X?若是前者的話,有什麼推薦的資料或者書麼?最好中文。英文看起來效率會比較低。html

2 條評論 java

分享python

按投票排序按時間排序c++

46 個回答

贊同9反對,不會顯示你的姓名git

LiTuXecho "127.0.0.1 http://zhihu.com">…github

dropwater葉飄瀟雨知乎用戶 等人贊同編程

必須果斷學 3,而且,萬一有須要要寫 Py2 的東西,記得最開始寫上
json

from __future__ import division, print_function

發佈於 2014-07-20 2 條評論 感謝 設計模式

分享api

 收藏  沒有幫助  

舉報

    做者保留權利

贊同5反對,不會顯示你的姓名

QAMichaelPeng北美碼農

錢亦成胡淦森張玥 等人贊同

用Python作爬蟲的注意一下,scrapy不支持Python3。 Frequently Asked Questions
這裏有篇文章講scrapy的遷移工做:Scrapy on the Road to Python 3 Support

主要緣由是Twisted還不徹底支持Python3. 雖然Twisted大部分是可移植到python3的,但Twisted的http agent並不支持Python3.
scrapy團隊兩年前就開始了向python3的移植工做。如今scrapy每次提交都有一部分測試在python3下執行。

除了Twisted, 移植的另外一個大問題是Request和Response對象。這個問題最近獲得瞭解決。解決中遇到了以下一些問題:

  1. HTTP headers應該是byte仍是unicode?key和value須要區別對待麼?一些headers如cokies一般是UTF-8, HTTP Basic Auth一般是latin1編碼。其餘的headers卻沒有一個通用的編碼。一般用bytes表示HTTP headers是合理的。但有一個問題:若是你將現有代碼從Python2.x移植到3.x,一些之前運行正常的代碼可能會悄悄的出錯。好比一個HTTP response包含"content-type: application/json".若是headers用bytes表示,在Python2.x中,content_type == 'application/json'返回True, 但在Python3.x中就會返回False,由於你在拿Unicode字面量和bytes進行比較。

  2. 如何正確的進行百分比轉義和反轉義?正確轉義依賴於網頁的編碼和該轉義URL的哪部分。若是網頁使用非ASCII編碼就可能有問題。通過一些實驗後咱們發現瀏覽器在幹一些很瘋狂的事情:URL路徑在轉義以前進行了UTF-8編碼,但query string在轉義前卻使用了網頁裏的編碼。你不能依賴瀏覽器在界面上顯示了什麼來判斷URL的編碼,在OS X和Linux上,每一個FireFox和Chromed發送給服務器的都是UTF-8編碼的路徑和網頁編碼的query string.但它們顯示給用戶的則依賴於瀏覽器和操做系統。

  3. URL相關的函數在Python2.x和3.x中有很大不一樣。Python2.x中這些函數只接受bytes,Python3.x中只接受Unicode. 這和瘋狂的編碼問題搞在一塊兒讓代碼移植變得愈加困難。

編輯於 2015-10-11 1 條評論 感謝 

分享

 收藏  沒有幫助  

舉報

    做者保留權利

贊同415反對,不會顯示你的姓名

徐釀泉底層不熟

戴子天知乎用戶、潘奮圖 等人贊同

Py 3 堅決果斷,強烈反對說什麼向後兼容什麼歷史緣由,就是由於大家 Py 3 才被抹黑成這樣的。以前看到個幻燈片,說不用Py3的大家錯過了什麼,我找找。(前幾期碼農週刊看到的,沒時間找了,這個答案是我憑着一口怒氣用手機碼的。)

乾貨:
十個碉堡了的 Python 特性,你不能用是由於你拒絕升級 Python 3
(翻頁用方向鍵)

你真覺得向後兼容就是兼容?Python(社區)在 2 到 3 的兼容已經作了大量大量大量的工做了。2to3 大家都知道,這個大家也該知道:Six: Python 2 and 3 Compatibility Library

如今 Py 2.7 向前兼容已經很好了,不少庫同一套代碼兼容 2.7 和 3,這叫不能兼容?哪一個平行語言一套代碼直接能用到另外一個語言上?這叫平行語言?

平心而論,有斷層,可是確是容易彌補的。

大家真覺得那麼多年 Py3 的更新都是吃白飯的?一個現代時髦腳本語言離開了不斷的特性更新,只有半死不活的安全維護,這算活着!?

醒醒吧,社區正在不斷向 3 遷移,雖然手頭沒有數據,可是不信能夠寫代碼去 GitHub 之類的地方統計一下,Py 3 的支持是什麼樣的趨勢。當年確實不方便用 3,由於沒什麼庫,我由於這樣的考慮入門也是用的 2 ,如今年復一年,一個又一個的庫遷移了,大家仍是一套說辭,這不是慣性不是惰性是什麼?

如今還不支持 Py 3 的庫大可能是常年無人維護的東西了,固然還有少數必須的,好比說 OpenCV,但這不是放棄 Py3 的理由,人家問的是初學者,對於初學者來講不須要考慮公司用什麼,不須要考慮計算某種化學數據的庫是否是用 Py2 寫的,人家到時候要用回 Py 2 稍微注意一點就好了——我如今實習中用 Py 2 也就是一直被編碼搞得很惱火,其餘沒遇到什麼問題。

3.X版本的沒有pandas、matplotlib、scipy庫

請問你是哪一個時代的Py3?難道你是坐時光機過來的??我用 Py3 處理數據機器學習處理圖片,歡得很。

你打算把你的生命浪費在處理編碼問題,體會那些早已過期的語法嗎?一想到 map filter 居然生成一個 list 我就心寒。

2.7 已經永不添加新的特性了,只會修復原有安全問題。

PyPy,各大 Web 框架,科學計算包(SciPy.org — SciPy.org),都已完美支持。(PyPy 是最近成熟支持的,http://morepypy.blogspot.jp/2014/06/pypy3-231-fulcrum.html,這也說明了趨勢)
不要活在過去啊。

若是大家真信了向 Py 3 遷移要十年的話,Py 3 的遷移就須要無限年,你仔細嘗試一下,那麼向 Py 3 遷移只須要五分鐘。

更新:
我不是說你不能用 2,純粹看工程須要甚至我的喜愛,但我須要破除對 3 的偏見。你說我喜歡 2 要用 2,你說你的代碼依賴 2 要用 2,我舉雙手支持。可是你說新手別學 3,由於沒人用 3,3很差學沒有庫,我就不敢苟同了。你是你,我不能強求你任何事情,哪怕你用 Py1 我都管不着。

  1. 編碼問題,首先這個問題是對初學者來講的,若是你以爲初學者學習 Python 要懂得 Python 的 str 類型是 byte array ,每個字只有一個字節的空間,若是要放中文必須把一箇中文用多個字節編碼放進 str 用得時候組合起來,或者用另一個類型……的話,那我無話可說。其次,就算你獨善其身,你也可能碰到庫翔同樣的 unicode 支持。

  2. 庫問題,這是個人答案一直在說的——有名的庫紛紛支持 Python 3,沒有歷史包袱的話使用 Python 3 基本不會碰到任何問題。

  3. 語法差別是不大,這就是二者能作到兼容的基礎。那麼對於一個新手學習來講,應該去學雖然資源豐富可是終將死去的 2,仍是去學 3?應該忍受 class Foobar(object): 仍是輕鬆地寫 class Foobar: ?應該是 input_raw 仍是直接 input?

  4. 對於上一條的補充,我說 Python 2 資料豐富,但實際上不少 Python 的資源是二者共享的(大多數問題是庫問題。)其次,如今的 Py2 教程什麼的也太老了——固然你說你百度搜索某個問題出來個百度空間的知其然不知其因此然的解決方法是寶貴的遺產的話那我無話可說。

  5. 若是大家真的,真的,真的先入爲主地把 2 和 3 已經當作兩個不一樣的語言了那還怎麼談?__future__ 真的哭暈在廁所啊。


更新 3 的侷限,大家本身看,有這方面須要的人或許比較適合Python 2,歡迎補充指正:

  1. OpenCV

  2. OpenStack

  3. 一些雲平臺,好比 GAE

  4. cz_freeze 不能將 Python 腳本打包成單獨的 exe 文件

  5. 待補充

編輯於 2014-07-26 93 條評論 感謝 

分享

 收藏  沒有幫助  

舉報

    做者保留權利

贊同38反對,不會顯示你的姓名

adv adj

成宇實名認證知乎用戶 等人贊同

樓主首先要搞明白一件事,python語言的最大優點並非語言自己的特性,而是它擁有腳本語言中最豐富的第三方包(模塊,庫或者叫什麼也好),這回其餘任何語言都沒法比擬的巨大優點。


不少人學python並非由於python適合開發什麼軟件或者工程,而是由於python擁有某個很是適合他們工做相關領域的簡單易用的工具包。


因此,學pyhton2仍是3關鍵要考慮的是你所準備使用的模塊是否支持3.x.


以我爲例,我使用python主要用於實驗也就是科學計算,個人主要研究方向是神經網絡,經常使用的模塊包括numpy, scipy, theano, pylearn2,在這幾個模塊中前兩個貌似已經有3.x版,可是後兩個短時間內幾百年沒有可能出現3.x版,而他們正好是GPU實驗必不可少的模塊。


在這種狀況下,我固然要繼續堅持使用python2了。


總而言之,個人建議是,學python,首先要明確本身要作什麼任務,要使用哪些模塊,以本身須要的模塊爲中心學習,而不是像學習c++和java那樣以語言自己或者設計模式爲主要學習內容。這一點其實與matlab很相像,只學習matlab的語法能夠說毫無心義,真正有用的是學習你所須要的matlab各個函數的用法。

編輯於 2014-07-22 7 條評論 感謝 

分享

 收藏  沒有幫助  

舉報

    做者保留權利

贊同17反對,不會顯示你的姓名

知乎用戶好讀書,不求甚解

窮小子李做騰知乎用戶 等人贊同

Python3,不少庫已經支持上來了,能夠開始使用了。
光是python3裏面字符串默認全是unicode這點就可讓我拋棄python2。

發佈於 2014-07-20 1 條評論 感謝 

分享

 收藏  沒有幫助  

舉報

    做者保留權利

贊同1反對,不會顯示你的姓名

Achilles Kars編程初心者、小角色、

陳永仁 贊同

( ゚∀゚) 說好的「There's Only One Way To Do It」呢?

發佈於 2015-04-28 2 條評論 感謝 

分享

 收藏  沒有幫助  

舉報

    做者保留權利

贊同13反對,不會顯示你的姓名

劉唯楚屬蛇

李一段子望HH AHH 等人贊同

做爲沒有歷史包袱的初學者,天然應該選3.x。

Python2orPython3 說,除非:1.要用只有2.x纔有的庫,2.你被要求非要用2.x。不然選該選3.x。

2再好再主流,將來的份額只會有降無升。語法上來講,3.x填了不少坑,用戶體驗優於2.x(換言之,用起來爽)。2.x每次from future import xxx難道不累麼?future早就已經擺在大家面前了。

論lib支持度:https://python3wos.appspot.com/ 最經常使用的200個lib如今只有35個仍是紅的了,並且還會逐漸下降。在連超級大坑Pypy都已經支持3.x的今天,py3k生態圈不成熟什麼的已經不成說辭了。

LPTHW說2.x還能夠戰十年:zed這句話是2010年說的。如今10年也過了一半了。如今有大把人(好比我)只用3,同樣活得很開心。

發佈於 2014-07-21 添加評論 感謝 

分享

 收藏  沒有幫助  

舉報

    做者保留權利
相關文章
相關標籤/搜索