一、類型注解的核心價值
-
代碼可讀性:明確函數輸入輸出類型
-
靜態檢查:配合mypy提前發現類型錯誤
-
IDE支持:提升代碼補全和重構能力
-
文檔替代:類型即文檔的現代編程理念
二、基礎語法規范
def greet(name: str, times: int = 1) -> str:return "\n".join([f"Hello {name}"] * times)class User:def __init__(self, uid: int, name: str) -> None:self.uid = uidself.name = name
三、高級類型應用
-
復合類型:使用typing模塊
-
List[str], Dict[str, int]
-
Optional[str] = Union[str, None]
-
Callable[[int, str], bool]
-
-
類型別名:
UserID = NewType('UserID', int) Coordinates = Tuple[float, float]
-
泛型支持:
T = TypeVar('T') class Stack(Generic[T]):def push(self, item: T) -> None: ...def pop(self) -> T: ...
四、工程最佳實踐
-
漸進式注解:從核心模塊開始
-
嚴格模式配置:
[mypy] disallow_untyped_defs = True warn_return_any = True
-
類型存根文件(.pyi)的使用
-
與Pydantic的結合:數據驗證場景
五、常見問題解決方案
-
循環引用問題:使用字符串字面量
def process_user(user: 'User') -> None: ...
-
動態類型處理:TypeDict和Protocol