Python 的 typing 模块提供了类型提示(Type Hinting)的支持,允许开发者在代码中使用静态类型标注。它是可选的类型检查机制,目的是提高代码的可读性、可维护性,并借助静态分析工具(如 mypy、pyright)在运行前发现潜在错误。
虽然 Python 是动态类型语言,typing 提供了一种轻量方式将静态类型特性引入代码开发过程,特别适用于大型项目或多人协作。
常见应用场景:
(1)编写清晰、可维护的函数接口和类定义。
(2)借助 IDE 自动补全、跳转与类型检查。
(3)为第三方库或老代码添加类型注释。
(4)配合 mypy、pyright 等工具进行静态分析。
◆ ◆ ◆
核心概念
1、类型提示工具箱
typing 提供一整套类型注解构造器,用于为函数参数、返回值、变量等添加类型提示。
2、支持泛型编程
通过 Generic、TypeVar 实现通用类型设计,增强类型灵活性与重用性。
3、支持嵌套和组合
类型构造器可嵌套使用,如 List[Dict[str, Tuple[int, int]]]。
4、静态类型检查而非运行约束
类型提示不会影响程序运行,主要供编辑器、IDE 和类型检查工具(如 mypy)使用。
◆ ◆ ◆
应用举例
例 1:使用 Union 与 Optional
from typing import Union, Optional
def parse_age(value: Union[str, int]) -> Optional[int]:
try:
return int(value)
except ValueError:
return None例 2:定义泛型函数
from typing import TypeVar, List
T = TypeVar('T')
def first_item(items: List[T]) -> T:
return items[0]例 3:使用 Callable 表示函数类型
from typing import Callable
def execute_twice(func: Callable[[int], int], x: int) -> int:
return func(func(x))例 4:使用 TypedDict 表示结构化字典
from typing import TypedDict
class User(TypedDict):
name: str
age: int
def get_user_info() -> User:
return {"name": "Alice", "age": 30}例 5:使用 Final 定义不可变常量
from typing import Final
PI: Final = 3.14159
# PI = 3.15 # mypy 或 pyright 将报错◆ ◆ ◆
常用类型与工具
Any
任意类型,跳过类型检查。
Callable
可调用对象(如函数)。
Dict[K, V]
键值对字典。
Final
声明不可被重定义的变量。
Iterable[T] / Iterator[T]
可迭代对象 / 迭代器。
List[T]
列表。
Literal
精确值限制,如 Literal["a", "b"]。
Optional[T]
可为 T 或 None,即 Union[T, None]。
Tuple[...]
元组类型,支持固定长度与可变长度。
TypedDict
类型明确的字典结构(类似数据类)。
Union[T1, T2, ...]
联合类型,可为其中任一类型。
TypeVar
泛型类型变量。
Protocol
结构子类型(鸭子类型)定义接口。
NoReturn
表示永远不会返回(如死循环或抛异常)。
函数类型注解语法示例:
from typing import List, Dict, Optional, Union
def greet(name: str, age: Optional[int] = None) -> str:
if age:
return f"Hello, {name}, age {age}"
return f"Hello, {name}"
def sum_list(numbers: List[int]) -> int:
return sum(numbers)
def get_config() -> Dict[str, Union[str, int]]:
return {"version": 1, "mode": "debug"}◆ ◆ ◆
补充说明
1、Python 3.9+ 原生支持 list[int], dict[str, int] 等简洁语法,推荐优先使用。
2、Python 3.10+ 引入 X | Y 表示联合类型,等价于 Union[X, Y]。
3、使用 typing.get_type_hints() 可在运行时获取类型注解。
4、类型提示不会影响程序运行,但可极大提升 IDE 智能补全与静态检查能力。
5、推荐结合 mypy 工具进行项目级别的类型检查。
“点赞有美意,赞赏是鼓励”
热门跟贴