WMX · 随记
·Python· 3 分钟阅读

类型注解:静态提示不会自动检查运行时输入

给函数加上 int 注解后,传入字符串并不一定立即报错。类型提示主要服务于工具与阅读者,运行时行为仍由实际代码决定。

▶ 本文含视频讲解
▶ 教学视频手动播放 · 英语讲解

Learn Python — Full Course for Beginners

Python 入门课程作为语法与编程背景复习;本文使用的较新标准库特性不保证在该课程中逐项覆盖。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。

播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。

Python 系列概览:输入校验、数据处理与行为验证
Python 系列概览:输入校验、数据处理与行为验证 点击图片查看大图 ↗

问题从哪里出现

给函数加上 int 注解后,传入字符串并不一定立即报错。类型提示主要服务于工具与阅读者,运行时行为仍由实际代码决定。

理解核心机制

Python 默认不根据注解执行参数验证。外部输入应在边界解析和校验,内部代码再使用明确类型;静态检查与运行时校验解决不同问题。

动手做一个小实验

Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。

Python11 行 · 可横向滚动
def twice(value: int) -> int:
    return value * 2

print(twice(3))
print(twice("3"))  # deliberately violates the annotation
def parse_positive(text: str) -> int:
    value = int(text)
    if value <= 0:
        raise ValueError("positive integer required")
    return value
assert parse_positive("4") == 4

适用边界与常见误区

isinstance(True, int) 为真,因为 bool 是 int 的子类。验证规则若不允许布尔值,需要明确排除;类型正确也不等于业务范围正确。

继续练习

为字符串数字、负数、空字符串和布尔值分别写出允许与拒绝规则,再比较静态检查器能发现哪些问题。

参考资料

阅读相关官方文档或原始资料 ↗

← 返回文章归档