类型注解
一、 前言:为什么 python 需要“强类型”思维?
Python 是一门动态语言,这意味着你不需要声明变量类型就能运行代码。这种灵活性在写小脚本时很爽,但在构建复杂系统时,隐患无穷:
- “猜谜”式开发:看到一个变量
data,你不知道它是list、dict还是None。 - 重构噩梦:修改了一个函数的返回结构,结果全项目到处报
AttributeError。 - IDE 沦为记事本:没有类型注解,PyCharm 或 VS Code 无法提供精准的自动补全。
类型注解(Type Hints) 是 Python 3.5+ 引入的里程碑功能。它不改变 Python 的动态特性(运行时依然不强制检查),但它通过“元数据”告诉开发工具和框架:这里应该是什么,那里会返回什么。
二、 基础篇:给变量和函数“贴标签”
最基础的语法是在变量名后加 :,在函数返回值前加 ->。
1. 基础变量与函数
三、 进阶篇:容器与复杂结构
在处理列表、字典或多种可能的返回结果时,我们需要用到 typing 模块(Python 3.9+ 推荐使用内置小写类型)。
1. 列表、字典与元组
2. 联合类型(Union)与可选类型(Optional)
在爬虫抓取数据时,某个字段可能存在,也可能是 None;或者某个 ID 既可以是数字也可以是字符串。
四、 核心篇:类、模型与 Callable
1. 函数作为参数 (Callable)
在 python 开发中,经常需要传递回调函数或处理函数。
2. Pydantic 模型(FastAPI 的灵魂)
这是你在开发后端时最常用的场景。类型注解不仅是注释,还是数据校验规则。
五、 工程实践:别让注解成为负担
- 不要过度注解:局部变量(如循环里的
i)通常不需要注解,IDE 能自动推断。 - 使用
Any作为逃生舱:当你实在无法确定类型(比如解析极复杂的 JS 逆向数据)时,使用from typing import Any,告诉检查工具“放我一马”。 - 配合
mypy检查:在终端运行mypy your_script.py,它会扫描全项目并指出所有类型不匹配的潜在 Bug。
结语
类型注解是 Python 从“脚本语言”向“工业语言”跨越的关键。掌握了它,你的代码将从“能跑就行”变成“清晰、健壮、易于维护”。

