本文介绍在 python 列表推导式中临时插入 print 语句的技巧(利用 print() or value 模式),同时强调其局限性,并推荐更清晰、更符合 python 风格的替代方案。
在编写紧凑的列表推导式(如筛选质数)时,有时需要快速观察中间变量(例如当前遍历的 number)的取值,以便调试逻辑。但直接在推导式中写 print(number) 会导致语法错误或破坏表达式结构——因为 print() 返回 None,而推导式需要生成有效元素。
一个技术上可行但不推荐的“技巧”是利用 Python 的短路求值特性:
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)
该写法能输出每个质数(每行一个),最后仍正确生成质数列表 [2, 3, 5, …, 97]。其原理是:print(number) 执行并返回 None,None or number 整体结果为 number,从而保持推导式元素完整性。
⚠️ 但请注意:这不是良好的实践。