- Python3.5從零開始學(xué)
- 劉宇宙
- 1216字
- 2020-11-28 16:06:57
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)成列表。
- 自制編譯器
- Learning Neo4j 3.x(Second Edition)
- RSpec Essentials
- 從零開始學(xué)Linux編程
- D3.js By Example
- Go語言精進(jìn)之路:從新手到高手的編程思想、方法和技巧(2)
- 基于SpringBoot實(shí)現(xiàn):Java分布式中間件開發(fā)入門與實(shí)戰(zhàn)
- 石墨烯改性塑料
- WildFly Cookbook
- Laravel Design Patterns and Best Practices
- Java設(shè)計(jì)模式深入研究
- Splunk Essentials
- Build Your Own PaaS with Docker
- Analytics for the Internet of Things(IoT)
- 零基礎(chǔ)學(xué)C# 3.0