Python 类型提示练习:让注解帮助读者
类型提示是沟通工具。它告诉读者函数接收和返回什么,也给编辑器足够的信息,在错误进入运行时之前发出提醒。它不会把 Python 变成静态类型语言。
给参数和返回值加注解
冒号引出参数注解,箭头引出返回注解。简单值直接使用内置类型。注解保存在 __annotations__ 中,get_type_hints 等工具可以读取。
def greet(name: str) -> str:
return f"Hello, {name}"
print(greet("Ada"))带类型的函数
描述集合里的内容
list[int] 表示列表里装的是整数;dict[str, float] 表示键是字符串、值是浮点数。这些提示描述接口,不会检查每个运行时值。传入包含字符串的列表仍然可以运行。
def total(values: list[int]) -> int:
return sum(values)
print(total([1, 2, 3]))带类型的集合
把缺失值写清楚
查找可能返回 None。用 float | None 这样的联合类型把这种可能写进返回类型。调用方就能在算术前检查 None,编辑器也能指出遗漏的分支。
def find_price(prices: dict[str, float], item: str) -> float | None:
return prices.get(item)
print(find_price({"tea": 3.5}, "coffee"))可能不存在的值
需要时在运行时读取注解
get_type_hints 会把注解解析成类型对象。这对小型演示和框架很有用。大多数应用代码不应根据注解分支;它们是文档和检查工具,不是第二套类型系统。
from typing import get_type_hints
def double(n: int) -> int:
return n * 2
print(get_type_hints(double))注解本身也是数据
期待文档作用,而不是强制检查
在标注为 int 的位置传入字符串,并不会自动抛出 TypeError。函数会继续运行,直到某个操作失败。需要静态强制时,在 CI 中使用 linter 或类型检查器;不可信输入仍需运行时校验。
def double(n: int) -> int:
return n * 2
print(double("a"))提示不会转换值
你的练习清单
- 给公开函数的参数和返回值加注解。
- 集合内容用 list[int] 和 dict[str, float]。
- 值可能缺失时,返回类型包含 None。
- 不要指望类型提示校验运行时输入。
- 需要强制执行时,使用类型检查器。
常见问题
类型提示会让 Python 更快吗?
本身不会。它们是给工具使用的元数据,解释器不会强制执行。
每个变量都要加注解吗?
通常不用。注解函数边界,以及从名称和赋值看不出类型的值。
旧版 Python 怎么表示 list[int]?
Python 3.8 及更早版本使用 typing.List[int]。现代 Python 支持内置泛型。
练习类型提示
12 道题,覆盖注解、list[int]、可选返回值和运行时行为。
继续阅读: