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

weixin_34050427發表於2018-05-25

今天來說說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類。

7.元類宣告

python2中宣告元類:__metaclass__ = MetaClass

python3中宣告元類:class newclass(metaclass=MetaClass):pass

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教程和參考資料,從入門到高階的都有,檔案已經打包好了,正在學習Python的同學可以免費下載學習學習。檔案下載方式:點選我的頭像,關注後私信回覆“資料”即可下載。首先把程式碼擼起來!首先把程式碼擼起來!首先把程式碼擼起來!重要的事說三遍,哈哈。“程式設計是門手藝活”。什麼意思?得練啊。

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

相關文章