錯誤調試精確到行、match-case模式匹配……Python 3.10真的很友好
Python 是當今最流行的編程語言之一,已被廣泛用于各種領域和應用,從學習計算機科學的基礎知識到執行復雜而直接的科學計算任務,再到構建游戲,它的影子無處不在。Python 甚至應用于數據科學和量子計算等更高級的領域。
2020 年 11 月,Python 3.10 第二個 alpha 版本發布,在類型注釋擴展、zip、位計數、字典映射有了新的改進。今年 4 月,Python 3.10 beta 版發布,最大的亮點就是引入了 switch-case 語句。之后,Python 又陸續發布了幾個 beta 和 rc(Release Candidate)版本。
10 月 4 日,Python 官方終于發布了 Python 3.10 正式版。新版本中,Python 添加了一些獨特且有價值的特性,同時刪除了一些舊特性。有人總結出了 3.10 版本的三大重要特性,分別是:
- 更好的錯誤跟蹤;
- match-case 結構模式匹配;
- 新型 Union 運算符。

法國學者 Thibault Clerice 表示,「隨著 Python 3.10 的發布,每個程序員都會愛上新的『結構模式匹配』功能。」

對于 Python 3.10 的新特性,威斯康星大學麥迪遜分校統計學助理教授、暢銷書籍《Python Machine Learning》的作者 Sebastian Raschka 表示,「新特性中最令人興奮的是改進的錯誤信息提示,像缺少逗號或拼寫錯誤等小的錯誤,現在很容易被發現。」

此外,有網友表示,Python 3.10 已經提供了適配 Linux 和 macOS 系統的 psycopg2 二進制包,但 Windows 系統尚未適配好。

慶應大學量子計算博士生 Sara A. Metwalli 更是撰文對 Python 3.10 的全新特性進行了全面的整理,總結出了以下六大新特性和附件組件。
Python 3.10 最新特性

特性 1:更好的錯誤跟蹤
作為一位每天使用 Python 編寫代碼的碼農,肯定沒少踩過語法錯誤的坑。雖然成熟的程序員可以熟練地掌握 Python 技巧,語法上的錯誤也能很好地修復,但有時我們希望得到更準確的錯誤消息,以幫助更好地定位錯誤,節省調試時間。
Python3.10 新增兩個特性,可以更好地處理錯誤,即更好的錯誤消息和用于調試的精確行號。以下列代碼為例,代碼中包含字典和函數,然而這段代碼顯示沒有關閉字典。
- some_dict = {1: "jack", 2: "john", 3: "james" ,
- a_results = a_useful_function()
在之前的 Python 版本中,這個錯誤信息看起來像這樣:

但是,隨著 Python 3.10 的到來,新的錯誤消息和行編號的改進,能給碼農帶來更好的錯誤消息,比如錯誤的確切類型及其確切的行號都能跟蹤。

Python 3.10 關于錯誤跟蹤新特性將有助于加快調試速度,并減少初學者挫敗感。
特性 2:引入結構模式匹配
如果你已經使用過 C++ 等其他編程語言,或許你會期待 Python 有 switch 語句,這樣就不必通過長的 if、 elif、 elif…. else 語句來完成任務。Python 3.10 的一個新特性是增加了結構模式匹配,或者換句話說,增加了 match case 語句,它的語法如下:
- match subject:
- case <patt1>:
- <act1>
- case <patt2>:
- <act2>
- case <patt3>:
- <act3>
- case _:
- <action_default>
特性 3:新型 Union 運算符
盡管 Python 是一種動態類型的編程語言,但有一些方法可以使它的某些部分成為靜態類型。例如,如果你正在編寫一個函數,并且屬性(attributes)的類型對于函數內部的轉換非常重要。在以前的版本中,可以指定屬性的類型,例如:
- def func(num: int) -> int:
- return num + 5
但問題來了,如果你想接受兩種類型,則需要使用 Union 關鍵字:
- def func(num: Union[int, float]) -> Union[int, float]:
- return num + 5
在 Python 3.10 中,你可以在兩種類型中進行選擇,使用 | 運算符而不是 Union 來進行更直接的類型決策:
- def func(num: int | float) -> int | float:
- return num + 5
特性 4:Stricter Zipping
Python 中一個有趣的函數是 zip() 函數,這是 Python 中的內置函數,允許組合和迭代來自多個序列的元素。在以前的版本中,你可以使用具有不同長度序列的 zip,但是現在引入了一個新的參數 strict,用來檢查傳遞給 zip 函數的所有可迭代對象是否具有相同的長度。
特性 5:自動文本編碼
有時編碼會遇到這種情況,代碼在一臺機器上可以運行,但是在另一臺機器上會出錯。導致這種情況的原因很多,有些是文本編碼造成的。在 Python 的早期版本中,如果沒有顯式聲明編碼類型,首選的本地編碼可能會導致代碼在其他計算機上出現錯誤。在新版本的 Python3.10 中,如果用戶打開沒有特定編碼類型的文本文件時,可以激活一個警告來通知用戶。
特性 6:異步迭代
異步編程是一種功能強大的高級編程范式,它自 Python 3.5 版以來一直是 Python 的一部分。在 Python 3.10 中,有兩個新的異步內置函數 aiter() 和 anext() 使代碼更具可讀性。
對于很多程序員來說,Python 可能是他們編程的首選語言。Python 在眾多編程語言排行榜中也多次位居榜首,如 IEEE 2021 編程語言排名,Python 一騎絕塵,在總榜單以及其他幾個分榜單中依然牢牢占據第一名的位置。此次 Python 3.10 發布,必將為 Python 這門編程語言帶來更好的編程體驗。
【本文是51CTO專欄機構“機器之心”的原創譯文,微信公眾號“機器之心( id: almosthuman2014)”】