Python入門:Python 2與Python3有什麼區別?

今天來說說Python版本上的差異。目前,Python的版本主要包括兩種,Python 2與Python 3系列。先介紹一下它們的背景,幫助大家更好的理解。Python 是一種極具可讀性和通用性的編程語言。它的開發團隊有一個重要的基礎目標,就是使語言使用起來很有趣。Python 易於設置,並且是用相對直接的風格來編寫,對錯誤會提供即時反饋。

Python入門:Python 2與Python3有什麼區別?

Python 2

Python 2 發佈於 2000 年年底,意味著較之先前版本,這是一種更加清晰和更具包容性的語言開發過程。而先前版本的 Python 應用的是 PEP (Python 增強協議),這種技術規範能向 Python 社區成員提供信息或描述這種語言的新特性。此外,Python 2 還包括了更多的程序性功能,包括能自動化地管理內存的循環檢測垃圾收集器,增加了對 Unicode 的支持以實現字符的標準化,並採用列表綜合的方式以在現有列表基礎上創建列表。 隨著 Python 2 的不斷髮展,更多的功能被添加進來,包括將 Python 的類型和類在 Python 2.2 版本中統一為一層。

Python 3

Python 3 被視為 Python 的未來,是目前正在開發中的語言版本。作為一項重大改革,Python 3 於 2008 年年末發佈,以解決和修正以前語言版本的內在設計缺陷。Python 3 開發的重點是清理代碼庫並刪除冗餘,清晰地表明只能用一種方式來執行給定的任務。對 Python 3.0 的主要修改包括將 print 語句更改為內置函數,改進整數分割的方式,並對 Unicode 提供更多的支持。起初,Python 3的採用很緩慢,因為該語言不能向後兼容 Python 2,這就需要人們決定該使用哪個版本的語言。此外,許多封裝庫庫只適用於 Python 2,但是由於 Python 3 背後的開發團隊重申了終止對 Python 2 的支持,促使更多的庫被移植到 Python 3 上來。從對 Python 3 提供支持的 Python 包的數量可以看出,Python 3 已得到越來越多的採用,在撰寫本文時,支持它的包就已包括了 339 個最受歡迎的 Python 包。

目前,Python 3系列最常使用的就是3.6版本了,但是官網已經更新至3.7,但是這些已經不重要了,同一系列之間的差異不會太大。

Python入門:Python 2與Python3有什麼區別?

Python 2.7

在 2008 年 Python 3.0 的發佈之後,Python 2.7 於 2010 年 7 月 3 日發佈,並計劃作為 2.x 版本的最後一版。發佈 Python 2.7 的目的在於,通過提供一些測量兩者之間兼容性的措施,使 Python 2.x 的用戶更容易將功能移植到 Python 3 上。這種兼容性支持包括了 2.7 版本的增強模塊,如支持測試自動化的 unittest,用於解析命令行選項的 argparse,以及更方便的集合類。

Python 2.7 具有 Python 2 和 Python 3.0 之間的早期迭代版本的獨特位置,它因為對許多具有魯棒性的庫具有兼容性,對於程序員而言一直是非常流行的選擇。當我們今天討論 Python 2 時,我們通常指的是 Python 2.7 版本,因為它是最常用的版本。

然而,Python 2.7 被認為是一種遺留語言,且它的後續開發,包括現在最主要的 bug 修復,將在 2020 年完全停止。但是目前官網關於它的版本更新還在持續進行。

Python入門:Python 2與Python3有什麼區別?

以上說了這麼多,就是想告訴大家,能用Python 3,就儘量用。雖然一些老的教科書是以Python 2為基礎來講的,但是不影響你使用Python3。下面我就來列一下二者在使用上的差異,這是別人總結的,我修改了一下其中的錯誤。

1.字符串類型

python中有兩種字符類型:字節字符串和文本字符串。

Python入門:Python 2與Python3有什麼區別?

2.默認字符

python2中默認的字符串類型默認是ASCII,python3中默認的字符串類型是Unicode。

3.print

python2中,print是個特殊語句,python3中print是函數。

python2:print 'hello word!'

python3:print('hello word!')

4.除法 /

python2中/的結果是整型,python3中是浮點類型。

5.導入

python2中的包導入順序:標準庫—相對倒入(即當前目錄)—絕對導入(sys.path)

python3中的包導入順序:標準庫—絕對導入(如果想要相對導入,使用from .moudel)

6.類

python2中默認類是舊式類,需要顯式繼承新式類(object)來創建新式類。

python3中完全移除舊式類,所有類都是新式類,但仍可顯式繼承object類。

8.異常

python2中引發異常:raise ValueError,'Invalid value'

python3中引發異常:raise ValueError('Invalid value')——在python2中也生效

9.處理異常

python2中處理異常:

try: raise ValueError,'Invalid value'except ValueError,e: pass

python3中處理異常:

try: raise ValueError,'Invalid value'except ValueError as e:#在python2中也生效 pass

python2中異常鏈會丟失原始異常信息,即:處理B異常時引發了A異常,B異常信息會丟失。

python3中將原始異常信息賦值給__context__屬性。並且可以顯式指定一個異常作為另一個異常的子句:raise DatabaseError() from IOError()

10.字典

python2中的dict類中的keys、values和items均返回list對象,iterkeys、itervalues和iteritems返回生成器對象。

python3中移除了list、只返回一個生成器的對象,只保留視圖(生成器),但方法名為:keys、values和items。

11.模塊合併

python2中的StringIO和cStringIO合併為python3中的io。

python2中的pickle和cPickle合併為python3中的pickle。

python2中的urllib、urllib2和urlparse合併為python3中的urllib。

12.重命名模塊

Python入門:Python 2與Python3有什麼區別?

Python入門:Python 2與Python3有什麼區別?

後續發展

Python 3 和 Python 2 之間的最大區別不是語法上的,而是事實上 Python 2.7 將在 2020 年失去後續的支持,Python 3 將繼續開發更多的功能和修復更多的錯誤。最近的發展包括格式化的字符串,類創建的簡單定製,和用一種更乾淨的句法方式來處理矩陣乘法。Python 3 的後續開發意味著,開發人員可以對問題被及時解決抱有信心,並且隨著時間的推移更多的功能將被添加進來,程序也會變得更加有效。

寫在最後

Python入門:Python 2與Python3有什麼區別?


分享到:


相關文章: