從Python 2到Python 3的變化

? ? ? ? 在 Python 的圈子里,關于 Python 2 和 Python 3 的爭論持續不斷,總是一波未平一波又起。雖然在很多的項目中,在一定程度上都實現了對 Python 2 和 Python 3 的兼容,但是兩者的問題依舊是無法避免,仍然是編程界必須關注的要點之一。

當前的形勢

? ? ? ? 以下是 Python 核心團隊對不同 Python 版本的時間規劃。從表中可以看出,他們計劃將在 2020 年停止支持 Python 2,全力投入到Python 3 當中。

當前仍在支持的 Python 版本
已停止支持的 Python 版本

在2017年年底,一系列項目開發團隊發布了即將放棄支持 Python 2.x 的聲明,它們也將計劃在2020年停止支持 Python 2。具體如下:

即將放棄支持 Python 2.x 的工具

? ? ? ? 是不是看到了很多自己熟悉的工具?在不久的將來,你必須得要在這些工具當中使用 Python 3,真正放棄使用 Python 2了。不過還有2年多的時間,還來的及。有興趣的人,還可以投入到各種工具從 Python 2 到 Python 3 在代碼修改工作當中。

主要的變化

? ? ? ? Python 3 的變化并不是特別多,但也不是一兩句話就能解釋清楚的。下面會簡單說明一些主要的變化,未來會再寫一篇文章詳細地解釋這些變化。

1. print 變成了 print()

? ? ? ? Python 2 中的 print 只是一條語句,除了輸出后面所跟的內容,不能做其他的附加操作。當 print() 用作函數時,可以添加各種關鍵字參數來改進標準行為,實現更多的附加操作。

2. 默認情況下字符串會轉換為 Unicode 編碼

????????Python 開發者常常面對的一個“陷阱”就是字符串的編碼問題。當處理 Unicode 和通常的 ASCII 字符串時,無數的 Python 開發人員遇到這種問題已經不止一兩天了。

????????在 Python 3.x 中這種類型的問題將不再經常發生。字符串默認為 Unicode 編碼,用戶將不再需要使用 Unicode 和 ASCII/非 Unicode 字符串這些術語。Python 3 使用了文本(text)和(二進制)數據的概念,而非 Unicode 字符串和 8 位字符串。所有的文本都是 Unicode 編碼,編碼的 Unicode 表示成二進制數據。用來保存文本的類型是 str,而用來保存數據的類型是 bytes。因為現在默認的是 Unicode 編碼,所以前導 u 或 U 已經棄用。同樣地,新的字節對象需要在字節前面提供一個 b 或 B 前置。

3. 增加了一個單類(single class)類型

? ? ? ? 這是一種新型的類,能夠實現繼承數據類型以及修改它們。這是一種統一的類型(Type)和類(Class)

4. 更新了異常的語法

? ? ? ? 在捕獲異常中,新增 as 關鍵字作為異常類型和對象變量的間隔,替代了逗號,確保開發者不會因為原始語法中的逗號而混淆。

? ? ? ? 過去的形式:

except ValueError, e:? ? ? ? # 處理單個異常

except (ValueError, TypeError), e:? ? ? ? # 處理多個異常

except ValueError, TypeError, e:? ? ? ? # 無效語句

? ? ? ? Python 2.6 以后版本的形式:

except ValueError as e:? ? ? ? # 處理單個異常

except (ValueError, TypeError) as e:? ? ? ? # 處理多個異常

? ? ? ? 在拋出異常中,處理的語句實際上變成創建一種異常的一個實例,這是 Python 3.x 中唯一支持的一種語法。

raise ValueError, e? ? ? ? # Python 2.x 的表達

raise ValueError(e)? ? ? ?# Python 3.x 的表達

5. 更新了整數

? ? (1)單整數類型

? ? ? ? 實現了 int 和 long 的統一。當使用 int 超過本地整數大小時,不會再導致 OverflowError 異常。long類型在 Python 3.0 中已經消失,并且后綴 L 也已經棄用。

? ? (2)除法的改變

? ? ? ? 任意給定兩個操作數,“/”總是返回一個浮點數,“//”永遠表示向下除法。

? ? (3)二進制和八進制的表示

? ? ? ? 十六進制表示保持不變,依然使用前導 0x 或 0X。八進制從使用單個 0 為前導,更改為 0o 。二進制以 0b 為前綴。

6. 迭代無處不在

? ??????使用迭代器比在內存中維護整個列表更有效,特別是針對問題對象的目標動作是迭代時,從而避免浪費內存。例如,函數 map()filter()range()zip(),加上字典方法 keys()items() values(),其中每一個都返回一些種類的迭代器。如果想查看數據,那么這個語法可以更方便,而在查看資源消耗時它更好用。



參考內容:

《Python核心編程(第三版)》[美] Wesley Chun 著,孫波翔、李斌、李晗 譯。

http://www.python3statement.org/#sections30-projects

https://github.com/numpy/numpy/blob/master/doc/neps/dropping-python2.7-proposal.rst

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容