三个机制,一组共同的设计思想
迭代器定义按需获取数据的统一协议;生成器用可暂停函数简化迭代器实现;装饰器利用函数是一等对象,在不修改核心逻辑的前提下包装行为。
它们共同体现了 Python 的协议优先、惰性计算、函数是一等对象,以及用语法糖隐藏重复结构代码。
理解执行模型,而不只是语法
迭代器的关键是 next 与 StopIteration 组成的协议;生成器的关键是执行可以在 yield 处暂停并保存状态;装饰器的关键是定义期的对象变换与名字重新绑定。
def count_up(limit):
current = 0
while current < limit:
yield current
current += 1
for number in count_up(3):
print(number)真正需要掌握的是对象何时创建、代码何时执行、状态保存在哪里、异常向哪里传播,以及资源何时释放。
三种机制的关系
| 机制 | 核心能力 | 典型用途 |
|---|---|---|
| 迭代器 | 按需取值 | 统一遍历协议 |
| 生成器 | 暂停和恢复执行 | 流式处理、节省内存 |
| 装饰器 | 包装函数或类 | 日志、鉴权、缓存 |
学习清单
- 理解
iter()和next()的调用关系 - 用生成器处理大数据流
- 编写保留函数元信息的装饰器
- 分析异常和资源的生命周期
原文包含完整示例
这篇文章最初发布于 wjhici.cn,包含迭代器协议、生成器控制方法、装饰器工程实践、Python 与 C++ 对照,以及常见面试题与实践清单。可通过文末链接阅读完整原文。