Python 函数的 -> 及参数的强类型注解详解
Python 函数的 -> 及参数的强类型注解详解
什么是类型注解?
📌 Python
从 3.5 开始支持类型注解(Type Hinting)
,用于指定函数参数和返回值的类型,使代码更可读、可维护,并可使用 mypy
等工具进行静态类型检查。
💡 语法:
1 |
|
🔹 示例
1 |
|
✅ 这里 x: int
和 y: int
指定参数类型,-> int
指定返回值类型。
为什么要使用类型注解?
特点 | 无类型注解 | 有类型注解 |
---|---|---|
代码可读性 | 低 | 高 |
静态错误检测 | ❌ 运行时报错 | ✅ 提前检查 |
IDE 支持 | 较差,提示不精准 | ✅ 自动补全更准确 |
适用于大型项目 | ❌ 维护困难 | ✅ 代码更稳定 |
基础类型注解
📌 Python
中常见的类型:
数据类型 | 注解方式 | 示例 |
---|---|---|
整数 | int |
x: int = 10 |
浮点数 | float |
y: float = 3.14 |
字符串 | str |
name: str = "Tom" |
布尔值 | bool |
flag: bool = True |
列表 | List[类型] |
scores: List[int] = [90, 80, 70] |
元组 | Tuple[类型1, 类型2] |
data: Tuple[int, str] = (1, "hello") |
字典 | Dict[键类型, 值类型] |
info: Dict[str, int] = {"age": 25} |
集合 | Set[类型] |
nums: Set[int] = {1, 2, 3} |
进阶:可选参数 (Optional)
📌 有些参数可能是 None
,可以使用 Optional
(等价于 Union[类型, None]
)。
1 |
|
进阶:多个返回类型(Union)
📌 如果函数可能返回多种类型,如 int
或 str
,可以使用 Union
:
1 |
|
高级:泛型 (Generics)
📌 当参数或返回值的类型不确定时,可以使用泛型(TypeVar)
:
1 |
|
Callable(函数类型)
📌 有时,我们需要传递函数作为参数,可以使用 Callable
指定函数的参数和返回类型:
1 |
|
Any(任意类型)
📌 如果参数或返回值可以是任意类型,使用 Any
:
1 |
|
企业实战:数据库查询
📌 在企业开发中,我们常用类型注解来约束数据库返回的数据结构。
1 |
|
结合 mypy 进行静态类型检查
📌 Python
本身不会强制类型检查,但可以使用 mypy
进行静态检查:
1 |
|
⚠️ 如果 my_script.py
里有错误:
1 |
|
🔴 mypy
会报错:
1 |
|
使用 @overload 进行重载
📌 在 Python
中,函数可以有不同的参数和返回值,使用 @overload
提供更精准的类型提示:
1 |
|
总结
概念 | 作用 | 示例 |
---|---|---|
参数类型注解 | 指定函数参数类型 | def func(a: int): |
返回值注解 | 指定返回值类型 | -> int |
Optional |
允许None 值 |
Optional[str] |
Union |
多种可能类型 | Union[int, str] |
List /Dict |
复杂数据类型 | List[int] /Dict[str, int] |
泛型TypeVar |
适配多个类型 | T = TypeVar("T") |
Callable |
传递函数 | Callable[[int], int] |
Any |
任意类型 | Any |
mypy |
静态类型检查 | mypy script.py |
Python 函数的 -> 及参数的强类型注解详解
https://dreamshao.github.io/2025/03/28/Python函数参数的强类型注解详解/