typing 模块是 Python 3.5 引入的一个标准库模块,用于支持类型注解(Type Annotations)。类型注解允许开发者在代码中显式地指定变量、函数参数、返回值等的预期类型,从而提高代码的可读性和可维护性,并帮助静态类型检查工具(如 mypy)进行类型检查。

主要用途

  1. 类型注解:通过在变量、函数参数、返回值等地方添加类型注解,可以明确指定它们的预期类型。
  2. 静态类型检查:结合静态类型检查工具(如 mypy),可以在代码运行之前发现潜在的类型错误。
  3. 提高代码可读性:类型注解可以让其他开发者更容易理解代码的意图。

常用类型注解

typing 模块提供了许多用于类型注解的工具,以下是一些常用的类型注解:

  • List, Dict, Set, Tuple:用于注解列表、字典、集合、元组等容器类型。
  • Optional:表示一个值可以是某个类型,也可以是 None
  • Union:表示一个值可以是多个类型中的任意一个。
  • Any:表示任意类型。
  • Callable:用于注解函数或可调用对象。
  • TypeVar:用于定义泛型类型变量。
  • Generic:用于定义泛型类。
  • Sequence:用于注解序列类型(如列表、元组等)。
  • Mapping:用于注解映射类型(如字典)。

示例

from typing import List, Dict, Optional, Union

def greet(name: str) -> str:
    return f"Hello, {name}"

def process_data(data: List[int]) -> Dict[str, int]:
    return {"length": len(data), "sum": sum(data)}

def find_user(user_id: int) -> Optional[Dict[str, Union[str, int]]]:
    if user_id == 1:
        return {"name": "Alice", "age": 30}
    else:
        return None

# 使用类型注解的变量
age: int = 25
name: str = "Bob"

静态类型检查

使用 mypy 进行静态类型检查:

mypy your_script.py

如果代码中有类型不匹配的地方,mypy 会给出相应的错误提示。

总结

typing 模块为 Python 提供了强大的类型注解功能,使得开发者可以在代码中明确指定类型,从而提高代码的可读性和可维护性,并借助静态类型检查工具提前发现潜在的类型错误。