在 python 列表推导式中直接添加 `print()` 等副作用操作虽可行(利用 `or` 短路逻辑),但违背其设计初衷;推荐改用显式循环以保证可读性与可维护性。
在 Python 中,列表推导式(list comprehension)的核心语义是声明式地构造新列表,而非执行副作用(如打印、写文件、修改全局状态)。然而,开发者有时希望在调试或教学场景中“观察”中间值(例如遍历过程中的 number),于是尝试在推导式中嵌入 print(number)。
一种技术上可行但不推荐的写法是利用 print() 返回 None(其布尔值为 False),结合 or 运算符的短路特性,确保表达式最终仍求值为所需元素:
prime_numbers = [
print(number) or 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 本身作为列表元素保留。输出形如:
2 3 5 ... 97 [2, 3, 5, ..., 97]
⚠️ 但请注意:这是一种反模式(anti-pattern)。