结论:不会。类型注解(PEP 484)默认只是元数据,解释器完全忽略——传错类型照样运行。检查发生在开发期:mypy/pyright 等静态检查器读注解报错;运行时如需强制校验要用 pydantic、typeguard、beartype 这类显式做检查的库。
展开:"不检查"不等于没用,注解的价值链:1)静态检查——CI 里跑 mypy,把类型不匹配挡在运行前,大项目重构成败的关键设施;2)IDE 智能提示与跳转;3)运行时元数据——__annotations__ 和 typing.get_type_hints() 可被框架消费:dataclass/attrs 用它生成 __init__,FastAPI 用它做请求解析与文档,pydantic 用它做校验,这是"注解驱动"框架的基础。版本细节:3.7 起 from __future__ import annotations 让注解延迟求值为字符串(解决前向引用、加速导入);3.10 起 X | None 联合写法替代 Optional[X];3.12 的 type 语句定义别名。易错点:get_type_hints 会真正求值字符串注解,前向引用缺失的名字会 NameError;泛型容器注解 list[int](3.9+ 内置泛型)与 typing.List[int] 混用在老代码里的兼容。
def greet(name: str) -> str:
return "hi " + name
greet(42) # 运行正常返回 'hi 42',只有 mypy 会报错
追问方向:渐进式类型的哲学(为什么 Python 选择注解可选)、Protocol 结构化子类型与 ABC 的取舍。