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

默认值判断:零、空字符串与 None 不能总合并

使用 value or default 很方便,但当零表示合法超时或空字符串表示关闭前缀时,这种写法会偷偷替换用户的设置。

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

Python Tutorial for Beginners

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

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

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

问题从哪里出现

使用 value or default 很方便,但当零表示合法超时或空字符串表示关闭前缀时,这种写法会偷偷替换用户的设置。

理解核心机制

or 根据真值选择操作数。None、0、空容器和空字符串都为假,但它们可能有不同业务含义。只有缺失才回退时,应显式使用 is None。

动手做一个小实验

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

Python6 行 · 可横向滚动
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 和空字符串写一张期望表,再决定每个配置项应使用哪一种判断。

参考资料

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

← 返回文章归档