Python 3.12 有什麼新功能¶
- 編輯者:
Adam Turner
本文介紹了 Python 3.12 與 3.11 相比多了哪些新功能。Python 3.12 於 2023 年 10 月 2 日發布。完整詳情請見 changelog。
也參考
PEP 693 -- Python 3.12 發布時程
發布重點摘要¶
Python 3.12 是 Python 程式語言的穩定版本,包含了語言和標準函式庫的綜合變更。標準函式庫的變更主要集中在清理棄用的 API、可用性和正確性。值得注意的是,distutils 套件已從標準函式庫中移除。os 和 pathlib 中的檔案系統支援進行了許多改進,並且有數個模組得到更好的效能。
語言變更主要集中在可用性,因為 f-字串已經移除了許多限制,並且持續改進 'Did you mean ...' 建議。新的型別參數語法和 type 陳述式改進了泛型型別和型別別名在與靜態型別檢查器一起使用上的效率。
這篇文章並不試圖提供所有新功能的完整規格,而是提供一個方便的概覽。完整詳情應參考文件,如標準函式庫參考和語言參考。如果你想了解某個新功能的完整實作和設計理念,請參考該功能的 PEP;但請注意 PEP 通常在功能完全實作後就不再更新。
新增語法特性:
新增語法特性:
直譯器改進:
PEP 669,低影響監控
改進了
NameError、ImportError和SyntaxError例外的「你的意思是... (Did you mean ...)」建議
Python 資料模型改進:
標準函式庫中的顯著改進:
pathlib.Path類別現在支援子類別化os模組在 Windows 支援上有了數項改進isinstance()對可在 runtime 檢查的協定的檢查速度可提高 2 到 20 倍asyncio套件進行了許多效能改進,一些基準測試顯示速度提高了 75%。
安全性改進:
將於
hashlib中 SHA1、SHA3、SHA2-384、SHA2-512 和 MD5 內建實作替換為來自 HACL* 專案的經正式驗證的程式碼。這些內建實作仍然作為備援方案 (fallback),僅在 OpenSSL 不提供它們時使用。
C API 改進:
CPython 實作改進:
PEP 709,行內綜合運算 (comprehension inlining)
對 Linux
perf分析器的 CPython 支援在支援的平台上實作堆疊溢位保護
新增型別特性:
重要的棄用、刪除或限制:
PEP 623:從 Python C API 中的 Unicode 物件中刪除
wstr,將每個str物件的大小減少至少 8 個位元組。PEP 632:刪除
distutils套件。請參閱遷移指南以查看替換原有 API 的建議。如果你在 Python 3.12 及後續版本中仍然需要它們,第三方套件 Setuptools 會繼續提供distutils。gh-95299:不再於以
venv建立的虛擬環境中預先安裝setuptools。這意味著distutils、setuptools、pkg_resources和easy_install將預設不可用;若要使用這些工具,請在已啟用的虛擬環境中執行pip install setuptools。asynchat、asyncore和imp模組以及幾個unittest.TestCase的方法別名已被刪除。
新增功能¶
PEP 695:型別參數語法¶
PEP 484 下的泛型類別和函式是使用較冗長語法來宣告,這使得型別參數的作用域不明確,並且需要顯式地宣告變異數 (variance)。
PEP 695 引入了一種新的、更簡潔和顯式的方法來建立泛型類別和函式:
def max[T](args: Iterable[T]) -> T:
...
class list[T]:
def __getitem__(self, index: int, /) -> T:
...
def append(self, element: T) -> None:
...
此外,PEP 引入了一種使用型別陳述式來宣告型別別名的新方法,該方法會建立一個 TypeAliasType 的實例:
type Point = tuple[float, float]
型別別名也可以是泛型:
type Point[T] = tuple[T, T]
新的語法允許宣告