默认值判断:零、空字符串与 None 不能总合并
使用 value or default 很方便,但当零表示合法超时或空字符串表示关闭前缀时,这种写法会偷偷替换用户的设置。
▶ 本文含视频讲解▶ 教学视频手动播放 · 英语讲解
Python Tutorial for Beginners
Python 入门课程作为语法与编程背景复习;本文使用的较新标准库特性不保证在该课程中逐项覆盖。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。
播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。
问题从哪里出现
使用 value or default 很方便,但当零表示合法超时或空字符串表示关闭前缀时,这种写法会偷偷替换用户的设置。
理解核心机制
or 根据真值选择操作数。None、0、空容器和空字符串都为假,但它们可能有不同业务含义。只有缺失才回退时,应显式使用 is None。
动手做一个小实验
Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。
def timeout_or_default(value):
return 30 if value is None else value
assert timeout_or_default(None) == 30
assert timeout_or_default(0) == 0
print([timeout_or_default(v) for v in (None, 0, 5)])适用边界与常见误区
自定义对象可以定义 __bool__,某些数组对象的真值判断还会拒绝模糊条件。不能把“非空”“有效”和“已提供”视为同一个概念。
继续练习
为 None、0、False 和空字符串写一张期望表,再决定每个配置项应使用哪一种判断。