Python 類型提示:靜態型別與註釋
了解如何在 Python 中編寫類型提示。提高程式碼品質、啟用自動完成並利用 mypy 進行靜態程式碼分析。
概述
Python 歷史上是一種動態類型語言,這意味著解釋器在運行時推斷變數類型,為開發人員提供了速度和靈活性。然而,隨著程式碼庫的成長,這種動態類型的靈活性可能會導致令人困惑的執行時間錯誤,例如將清單傳遞給需要字串的函數。為了彌補這一差距,Python 3.5 引入了類型提示(類型註釋),允許開發人員在程式碼中明確記錄預期類型。
類型提示不會影響 Python 運行程式碼的方式;解釋器在運行時完全忽略它們。相反,它們的價值在於靜態分析和 IDE 工具。透過在變數、函數參數和傳回類型中新增類型註釋,您的 IDE 可以提供精確的自動完成功能並立即標記類型不符合錯誤。像「mypy」這樣的工具可以在部署之前掃描您的程式碼庫以靜態捕獲錯誤,模仿 TypeScript 或 Java 等語言的編譯時檢查。
Python 的打字功能非常廣泛。您可以註釋基本類型,如“str”、“int”和“bool”,或使用內建“typing”模組(或Python 3.9+ 中的標準集合)中的高級類型,如“list[str]”、“dict[str, int]”和“tuple[float, float]”。 「Union」(或Python 3.10+ 中的管道運算子「|」)等功能允許參數接受多種類型,而「Optional[T]」表示可以是特定類型或「None」的值。實現類型提示可以大大提高可讀性和團隊協作。
程式碼和執行輸出
使用類型註釋編寫函數並檢查它如何接受輸入。
# Type annotations for function parameters and return values
def greeting(name: str, count: int) -> str:
return f"Hello {name}! " * count
# Type hints on standard collections (Python 3.9+)
user_roles: dict[str, str] = {
"admin": "Alice",
"moderator": "Bob"
}
message = greeting("Jane", 2)
print(message)
print(f"Roles configured: {user_roles}")Hello Jane! Hello Jane!
Roles configured: {'admin': 'Alice', 'moderator': 'Bob'}逐步實施
- 防止大型團隊程式碼庫中的整合錯誤
- 在複雜的程式碼專案中啟用 IDE 程式碼完成
- 產生自記錄 API 結構和驗證模式
常見問題解答
類型提示是否在執行時強制執行類型安全性?
不會。如果您傳遞除帶註釋的提示之外的類型,Python 不會引發錯誤異常。若要強制執行類型檢查,您必須執行 mypy 等靜態檢查器。
Any 和 Union 有什麼不同?
Any 停用變數的類型檢查,允許它保存任何內容。 Union(或 T | U)將變數限制為特定的、已定義的類型子集。
相關主題
推薦的 Python 資源
透過相關的互動式教學、備忘單和程式碼比較來擴展您的知識。