python的类型注解讲解
一.什么是类型注解
类型注解(Type Hints) 是一种在 Python 代码中为变量、函数参数和返回值添加类型信息的方式。它类似于给代码写“说明书”,告诉开发者和工具:“这个变量应该是整数,这个参数应该是字符串,这个函数应该返回布尔值”。
Python 是动态类型语言:变量可以随时改变类型,比如 x = 5 后再写 x = “hello” 是合法的。
类型注解的作用:它只是“建议”或“提示”,不会强制限制类型。它的主要目的是帮助开发者提前发现潜在问题,并通过工具(如 mypy)进行静态检查。
二.类型注解的作用
- 提高代码可读性
通过类型注解,开发者可以快速理解变量或函数的预期用途。
例如:def add(a: int, b: int) -> int 比未注解的函数更清晰。 - 静态类型检查
使用工具(如 mypy)可以在代码运行前检查类型错误。
例如:如果函数参数被注解为 int,但调用时传入了 str,工具会提前报错。 - IDE 智能支持
IDE(如 PyCharm、VS Code)可以根据类型注解提供更准确的代码补全、重构建议。 - 团队协作
在大型项目中,类型注解能减少误解和错误,降低维护成本。
三.类型注解的语法介绍
3.1 变量类型的注解
- 语法
语法:变量名: 类型 = 值
name: str = "Alice" # name 应该是字符串
age: int = 30 # age 应该是整数
is_active: bool = True # is_active 应该是布尔值
3.2 函数参数和返回值注解
- 语法
语法:def 函数名(参数: 类型) -> 返回类型:
def greet(name: str) -> str: # name 是字符串,返回值也是字符串return f"Hello, {name}!"def add(a: int, b: int) -> int: # a 和 b 是整数,返回值也是整数return a + b
3.3 复杂类型注解
- 语法
需要从 typing 模块导入工具来表示更复杂的类型:
from typing import List, Dict, Tuple, Optional, Union# 列表:元素类型是 int
numbers: List[int] = [1, 2, 3]# 字典:键是 str,值是 int
user: Dict[str, int] = {"Alice": 30, "Bob": 25}# 元组:两个 float 类型
coordinates: Tuple[float, float] = (10.5, 20.7)# 可选类型(可能为 None)
email: Optional[str] = None # 等价于 str | None(Python 3.10+)# 联合类型(可以是多种类型之一)
def print_value(value: Union[int, str]) -> None:print(value)
3.4 类属性注解
class Person:name: str # name 是字符串age: int # age 是整数def __init__(self, name: str, age: int):self.name = nameself.age = age
3.5 泛型注解
from typing import TypeVar, ListT = TypeVar('T') # 定义一个泛型类型 Tdef first_element(items: List[T]) -> T:return items[0]# 使用泛型函数
numbers: List[int] = [1, 2, 3]
first_number: int = first_element(numbers) # 返回类型是 intnames: List[str] = ["Alice", "Bob"]
first_name: str = first_element(names) # 返回类型是 str
3.6 类型别名
from typing import List, Dict, TupleVector = List[float] # Vector 是浮点数列表的别名
User = Dict[str, str | int] # User 是字典的别名def scale_vector(vector: Vector, factor: float) -> Vector:return [x * factor for x in vector]