Python 推导式是声明式的(以及这为何重要)
发布: (2026年1月6日 GMT+8 08:48)
2 min read
原文: Dev.to
Source: Dev.to
两种方式对列表中的每个数字求平方
# Version A
squares = []
for num in numbers:
squares.append(num ** 2)
# Version B
squares = [num ** 2 for num in numbers]
命令式 vs. 声明式
Version A 告诉 Python 如何 构建列表:
- 创建一个空列表。
- 遍历
numbers。 - 计算平方。
- 将结果追加到列表。
- 重复上述步骤。
Version B 告诉 Python 想要什么:
“给我一个每个数字的平方组成的列表。”
在阅读不是自己写的代码时,声明式写法能让意图立刻显现,而命令式写法则需要你追踪循环逻辑。
可靠性
声明式代码更不容易出错。在命令式版本中,你可能会:
- 忘记初始化
squares = []。 - 把
.append()拼写成.appnd()。 - 追加了错误的值。
- 提前终止循环。
列表推导式消除了这些失误,因为模式已经写进了语法。
自问: “我能在一次快速阅读中理解这个推导式吗?”
推导式适用的场景
简单转换
[x ** 2 for x in numbers if x > 0]
过于复杂时(应避免)
[(x, y) for x in range(10) for y in range(10)
if x != y and (x + y) % 2 == 0 and x ** 2 + y ** 2]
“这 是 一个
f(x)值的列表。”
而不是:
“这 通过 这些步骤 变成 一个列表。”
内化这种区别有助于你自然地使用推导式——并且知道何时循环更合适。
改编自即将出版的书籍 Zero to AI Engineer: Python Foundations。
我会在 Substack 上分享此类摘录 →