官术网_书友最值得收藏!

1.3 從2.7到3.5, Python的新特性

目前,Python有兩個(gè)版本,一個(gè)是2.x版,一個(gè)是3.x版,這兩個(gè)版本是不兼容的。3.x不考慮對(duì)2.x代碼的向后兼容。雖然當(dāng)前大部分公司都是基于2.7版本進(jìn)行開發(fā)的,但是3.x版會(huì)越來越普及,所以本書將以最新的Python 3.5版本為基礎(chǔ)進(jìn)行介紹。在寫本書時(shí),Python的最新版本是3.5.2,本書中的示例和講解內(nèi)容都是基于這個(gè)版本進(jìn)行的。建議讀者安裝3.5.0以上的版本進(jìn)行學(xué)習(xí),這樣學(xué)習(xí)本教程中的內(nèi)容才會(huì)更加容易。

在3.x中,一些語法、內(nèi)建函數(shù)和對(duì)象的行為有所調(diào)整。大部分Python庫(kù)都同時(shí)支持Python 2.7.x和3.x版本,所以無論選擇哪個(gè)版本都可以。為了在使用Python時(shí)避免某些版本中常見的陷阱,或者需要移植某個(gè)Python項(xiàng)目時(shí),依然有必要了解一下Python兩個(gè)常見版本之間的主要區(qū)別。

兩個(gè)版本之間的主要區(qū)別如下:

1.使用__future__模塊

Python 3.x引入了一些與Python 2不兼容的關(guān)鍵字和特性。在Python 2中,可以通過內(nèi)置的__future__模塊導(dǎo)入這些新內(nèi)容。如果你希望在Python 2環(huán)境下寫的代碼也可以在Python 3.x中運(yùn)行,那么建議使用__future__模塊。

2. print函數(shù)

雖然print語法是Python 3中一個(gè)很小的改動(dòng),而且應(yīng)該已經(jīng)廣為人知,但是依然值得提一下:Python 2中的print語句被Python 3中的print()函數(shù)取代,這意味著在Python 3中必須用括號(hào)將需要輸出的對(duì)象括起來。在Python 2中使用額外的括號(hào)也可以,但是如果要在Python 3中以Python 2的形式不帶括號(hào)調(diào)用print函數(shù),就會(huì)觸發(fā)SyntaxError(語法錯(cuò)誤)。

3.整數(shù)除法

由于人們常常會(huì)忽視Python 3在整數(shù)除法上的改動(dòng)(寫錯(cuò)了也不會(huì)觸發(fā)SyntaxError),因此在移植代碼或在Python 2中執(zhí)行Python 3的代碼時(shí)需要特別注意這個(gè)改動(dòng)。

4. Unicode

Python 2有基于ASCII的str()類型,可通過單獨(dú)的unicode()函數(shù)轉(zhuǎn)成unicode類型,但沒有byte類型。在Python 3中有了Unicode(UTF-8)字符串和兩個(gè)字節(jié)類(bytes和bytearrays)。

5. xrange

在Python 2.x中,經(jīng)常會(huì)用xrange()創(chuàng)建一個(gè)可迭代對(duì)象,通常出現(xiàn)在“for循環(huán)”或“列表/集合/字典推導(dǎo)式”中。在Python 3中,range()的實(shí)現(xiàn)方式與xrange()函數(shù)相同,所以不存在專用的xrange()(在Python 3中使用xrange()會(huì)觸發(fā)NameError)。

6.觸發(fā)異常

Python 2支持新舊兩種異常觸發(fā)語法,而Python 3只支持帶括號(hào)的語法(不然會(huì)觸發(fā)SyntaxError)。

7.處理異常

Python 3中的異常處理發(fā)生了一點(diǎn)變化。在Python 3中必須使用as關(guān)鍵字,Python 2中不需要。

8. next()函數(shù)和.next()方法

由于會(huì)經(jīng)常用到next()函數(shù)(.next()方法),因此要提到另一個(gè)語法改動(dòng)(實(shí)現(xiàn)方面也做了改動(dòng)):在Python 2中,函數(shù)形式和方法形式都可以使用;在Python 3中,只能使用next()函數(shù)(試圖調(diào)用.next()方法會(huì)觸發(fā)AttributeError)。

9. for循環(huán)變量與全局命名空間泄漏

在Python 3.x中,for循環(huán)中的變量不再會(huì)泄漏到全局命名空間中了。

10.比較無序類型

Python 3中另一個(gè)優(yōu)秀的改動(dòng)是,如果我們?cè)噲D比較無序類型,就會(huì)觸發(fā)一個(gè)TypeError。

11.使用input()解析輸入內(nèi)容

Python 3改進(jìn)了input()函數(shù),這樣該函數(shù)就會(huì)總是將用戶的輸入存儲(chǔ)為str對(duì)象。在Python 2中,為了避免讀取非字符串類型會(huì)發(fā)生的一些危險(xiǎn)行為,不得不使用raw_input()代替input()。

12.返回可迭代對(duì)象,而不是列表

某些函數(shù)和方法在Python 3中返回的是可迭代對(duì)象,而不像在Python 2中返回列表。對(duì)象只遍歷一次會(huì)節(jié)省很多內(nèi)存,如果通過生成器多次迭代這些對(duì)象,效率就不高了。此時(shí)如果需要列表對(duì)象,可以通過Python 3的list()函數(shù)簡(jiǎn)單地將可迭代對(duì)象轉(zhuǎn)成列表。

主站蜘蛛池模板: 涿鹿县| 长阳| 南澳县| 抚顺市| 金溪县| 闻喜县| 武隆县| 昌图县| 凉城县| 德昌县| 宾阳县| 保靖县| 昆明市| 大渡口区| 湟中县| 马边| 仁布县| 福泉市| 沾化县| 都昌县| 临猗县| 鱼台县| 甘德县| 筠连县| 南通市| 峨山| 陆丰市| 孝义市| 黎平县| 平泉县| 大足县| 汽车| 教育| 临安市| 北川| 九江市| 东乡族自治县| 江门市| 金华市| 南澳县| 渭源县|