本文介绍在 python 列表推导式中临时插入 print 语句的技巧(利用 print() or value 模式),并强调其适用场景、潜在风险及更规范的替代方案。
在编写紧凑的列表推导式(如筛选质数)时,有时需要快速观察中间变量(例如当前遍历的 number)的取值,以辅助调试或理解执行流程。但由于列表推导式语法限制,不能直接写 print(number) 作为表达式的一部分——它既不返回值,也不参与结果构建。
一个常见且有效的“技巧性”解决方案是利用 Python 的短路逻辑与 print() 的返回值特性:
prime_numbers = [
print(number) or number # 先执行 print(number),返回 None;None 为 falsy,故继续求值 number
for number in range(2, 101)
if all(
number % div != 0
for div in range(2, int(number**0.5) + 1)
)
]
print(prime_numbers)
这段代码会先逐个打印被判定为质数的 number(即每次成功通过 all(…) 检查时触发 print),再将该 number 本身纳入最终列表。输出效果如下:
2 3 5 7 ... 97 [2, 3, 5, 7, ..., 97]
✅ 原理简析: