🗾ITmedia AI+ (日本)•較早收集於 81m
Python 3.15 將引入 frozendict 與 sentinel 類別

💡了解 Python 新增的原生功能,協助您簡化 AI 專案中的狀態管理與資料不可變性。
⚡ 30-Second TL;DR
有什麼變化
引入 frozendict 作為內建的不可變字典型別。
為什麼重要
這些變更將簡化常見的 Python 慣用語,可能減少對第三方函式庫或自訂樣板程式碼的需求,特別是在處理不可變資料結構與哨兵物件時。
下一步行動
檢查您的程式碼庫中是否有自訂的哨兵實作或不可變字典封裝,並準備將其遷移至 Python 3.15 的原生型別。
誰應關注:Developers & AI Engineers
關鍵要點
- •引入 frozendict 作為內建的不可變字典型別。
- •新增 sentinel 類別以標準化缺失或不可用值的表示方式。
- •強化 Python 標準函式庫,減少對常見模式自訂實作的依賴。
🧠 深度解析
Web-grounded analysis with 22 cited sources.
🔑 增強重點摘要
- •frozendict 是一種不可變的內建型別,與標準字典不同,它不繼承自
dict,而是直接繼承自object,以避免繼承可變方法,並在所有鍵和值都可雜湊時自身也可雜湊,使其可用作其他字典的鍵或集合的元素,以及functools.lru_cache()的參數。 - •sentinel 類別旨在解決現有慣用語(例如使用
object())的缺點,這些缺點包括repr不具資訊性、缺乏明確的型別簽章,以及在複製或序列化/反序列化後身份可能不一致的問題。 - •Python 3.15 除了引入 frozendict 和 sentinel 外,還包含其他重要更新,例如透過 PEP 810 實現的顯式惰性導入以加快啟動時間、升級的 JIT 編譯器、改進的錯誤訊息、新的統計採樣分析器 (Tachyon, PEP 799),以及將 UTF-8 作為預設編碼 (PEP 686)。
- •sentinel 物件在布林上下文中被視為「真值」(truthy),這與
None的「假值」(falsy)行為不同,並且支援在型別註釋中使用|運算符,使其在型別系統中具有與None類似的特殊處理。 - •frozendict 和 sentinel 的引入是經過長期討論和多個 PEP 提案的結果,例如 frozendict 的概念早在 2012 年的 PEP 416 中就被提出但被拒絕,而 sentinel 的標準化需求則在 2021 年的郵件列表討論中浮現。
🛠️ 技術深入
- frozendict:
- 作為內建型別,它不繼承自
dict,而是直接繼承自object,以避免繼承可變方法。 - 只要其所有鍵和值都是可雜湊的,
frozendict實例本身就是可雜湊的,這使其可以用作集合元素或字典鍵。 - 它保留了插入順序,與 Python 3.6 以後的標準
dict行為一致。 - 支援聯集運算符 (
|和|=),這些運算會返回一個新的frozendict實例。 - 可與標準
dict進行相等性比較。 - 標準函式庫中的多個模組(如
copy、decimal、json、marshal、pickle、pprint和xml.etree.ElementTree)已更新以接受frozendict。 - 為了性能和安全性,它在 C 語言中實現。
- 作為內建型別,它不繼承自
- sentinel:
- 透過
sentinel('NAME')語法創建,其中NAME用於生成簡潔且具資訊性的repr。 - 創建的 sentinel 物件在布林上下文中評估為
True(truthy),這與None的False(falsy)行為形成對比。 - 確保物件身份在複製(例如
copy.copy())和序列化/反序列化(pickling/unpickling)過程中得以保留。 - 支援在型別註釋中直接使用
|運算符,例如int | MISSING,型別檢查器會對此進行特殊處理。 - 提供 C API (
PySentinel_New()) 以供 C 語言擴展使用。 - 在同一模組中,如果使用相同的名稱調用
sentinel(),將返回現有的 sentinel 物件,確保單例行為。
- 透過
🔮 前景展望AI analysis grounded in cited sources
Python 程式碼的可靠性和可維護性將會提高。
frozendict 提供了內建的不可變字典,減少了意外修改的風險,而 sentinel 類別則標準化了缺失值的表示,提高了程式碼的清晰度和型別安全性,從而減少了錯誤並簡化了除錯。
Python 生態系統將減少對第三方不可變字典庫和自訂 sentinel 實作的依賴。
將 frozendict 和 sentinel 作為內建型別,將鼓勵開發者採用標準化解決方案,從而降低專案的依賴複雜性並提高互操作性。
⏳ 時間線
1980年代末
Guido van Rossum 開始開發 Python。
2008
Python 3.0 發布。
2012-02
PEP 416 (Add a frozendict builtin type) 提出,後被拒絕。
2021-06
PEP 661 (Sentinel Values) 由 Tal Einat 創建。
2025-05
Python 3.15 開發開始。
2026-05-07
Python 3.15.0b1 發布,標誌著功能凍結。
📎 來源 (22)
Factual claims are grounded in the sources below. Forward-looking analysis is AI-generated interpretation.
📰
AI 週報
閱讀本週精選 AI 大事摘要 →
👉相關動態
AI 策展新聞聚合。所有內容版權歸原始發布者所有。
原始來源: ITmedia AI+ (日本) ↗