Python类型注解教程_提升代码可读性与规范性

Python类型注解不强制运行时检查,但提升可读性、IDE提示和静态检查;支持基础类型、泛型(typing模块或3.9+内置)、Optional、Union、变量/类属性注解,并需配合mypy等工具发挥效用。

Python类型注解不是运行时强制要求,但能显著提升代码可读性、便于IDE智能提示、支持静态类型检查工具(如mypy),是现代Python开发的重要实践。

基础类型注解写法

在函数参数和返回值后用冒号加类型标注,语法简洁直观:

  • def greet(name: str) -> str: 表示参数name应为字符串,返回值也是字符串
  • 支持内置类型:intfloatboollistdicttuple
  • 注意:listdict等泛型需配合typing模块或Python 3.9+的内置泛型(如list[str]

常用泛型与复杂类型

处理容器、可选值、联合类型时,需要更精确的表达:

  • from typing import List, Dict, Optional, Union(Python
  • def process(items: List[str]) -> Dict[str, int]: —— 明确列表元素和字典键值类型
  • def find_user(user_id: int) -> Optional[str]: —— 表示可能返回字符串或None
  • def parse(value: Union[int, str]) -> bool: —— 接受多种类型之一(Python 3.10+ 可写作 int | str

变量与类属性注解

类型注解不仅限于函数,也适用于变量声明和类成员:

  • username: str = "alice" —— 模块级或函数内变量可直接标注
  • class User:
      name: str
      age: int = 0 —— 类属性类型清晰,支持数据类(@dataclass)自动推导
  • from typing import ClassVar 用于标记类变量:version: ClassVar[str] = "1.0"

运行时兼容性与工具配合

类型注解默认不参与运行,但配合工具才能发挥最大价值:

  • 安装mypy:执行mypy your_script.py检测类型错误
  • VS Code + Pylance 或 PyCharm 默认识别类型注解,提供精准跳转和补全
  • 使用__future__ import annotations(Python 3.7+)可延迟求值注解,避免前向引用问题
  • 函数内注解支持字符串字面量(如def f(x: "MyClass") -> "List[int]":),适合循环引用场景