我先拋出我的觀點(diǎn),不要讓你的思維遷就于你的工具,而是讓你的工具遷就于你的思維!
python2和python3,從他們實(shí)現(xiàn)的精髓而言,其實(shí)真的沒(méi)有太多本質(zhì)的區(qū)別,我目前所感知的python3與python2的最大差別在于:
- python3的range相當(dāng)于python2的xrange。
- python3對(duì)于iterable(可迭代)對(duì)象全部采用惰性取數(shù)的原則,也就是在用的時(shí)候才去取數(shù),比如range (10)是一個(gè)range可迭代對(duì)象,而不是一個(gè)列表。一般如果要將可迭代對(duì)象迭代出,那么再對(duì)象外套一個(gè)list()就可以實(shí)現(xiàn)了(這種情況再使用map函數(shù)尤為明顯,你必須這樣套用list(map(...)))循環(huán)出map的內(nèi)容)。
- 對(duì)于生成器取消其next方法,next直接生格為內(nèi)置函數(shù)的級(jí)別。也就是對(duì)于生成器a,要循環(huán)出第1個(gè)元素,python2可以用a.next(), 但是這在python3會(huì)報(bào)錯(cuò),需改用next(a)。
- python3采用unicode編碼,解決了python2上很多的亂碼問(wèn)題。
- python2將于2020年停止更新。
- python3的print()必須加后面的括號(hào)。
上面講的好像想表達(dá)python3優(yōu)于python2, 新手入門應(yīng)該優(yōu)先選擇python3。
但是這不是我的最終意愿,我其實(shí)更想表達(dá)的是,這只是他們的一些細(xì)微上面的差別,對(duì)于新手入門來(lái)說(shuō),他們其實(shí)只是會(huì)造成些微的困擾而已!!!
你究竟應(yīng)該選擇python2還是python3,應(yīng)該取決你所選定的那本教材使用的是哪一個(gè)版本的python!
比如,learn python the hard way和利用python進(jìn)行數(shù)據(jù)分析, 他們用的python版本是2,所以如果你是初學(xué)者的話,你應(yīng)該優(yōu)先選擇python2,這樣子可以最大程度的避免你剛?cè)腴T時(shí)候的,雖然你敲了一模一樣的代碼,但還是報(bào)錯(cuò)的困擾和挫折感。至于那些對(duì)這些困擾不在乎,可以自己搜索答案解決問(wèn)題的同學(xué)來(lái)說(shuō),他們即使是用python3來(lái)運(yùn)行書(shū)中的代碼也是ok的,因?yàn)楫吘?個(gè)版本的差別并沒(méi)有那么大!
最后,講一下我的python版本使用,我入門是用的python 2.7, 入門書(shū)是learn python the hard way以及廖雪峰的python2.7教程,上的MITx 6.00.1x還有后來(lái)學(xué)習(xí)的利用python進(jìn)行數(shù)據(jù)分析都是用的是python2.7,但是我現(xiàn)在則主要用python3,主要是這樣子遇到亂碼的幾率會(huì)比較小,而且我用的那些包,如numpy, pandas, requests, bs4, scrapy等等都有python3的版本了。此外,當(dāng)你對(duì)python熟悉到一定程度其實(shí)這個(gè)版本轉(zhuǎn)換的成本是很小的!
愿你看了本文后,不會(huì)再對(duì)python版本的選擇問(wèn)題產(chǎn)生糾結(jié)!
祝生活愉快!
凡星
2017.05.17