← 写作归档

BC · 5,364m

Python 迭代器、生成器与装饰器

Python / 语言机制长文

从迭代协议、惰性求值和函数对象出发,串起三个常被分开记忆的 Python 核心机制。

三个机制,一组共同的设计思想

迭代器定义按需获取数据的统一协议;生成器用可暂停函数简化迭代器实现;装饰器利用函数是一等对象,在不修改核心逻辑的前提下包装行为。

它们共同体现了 Python 的协议优先、惰性计算、函数是一等对象,以及用语法糖隐藏重复结构代码。

理解执行模型,而不只是语法

迭代器的关键是 nextStopIteration 组成的协议;生成器的关键是执行可以在 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++ 对照,以及常见面试题与实践清单。可通过文末链接阅读完整原文。