20 分钟
Python 高级

生成器

用 yield 优雅创建迭代器

  • 理解 yield 的执行机制
  • 生成器函数和生成器表达式
  • 生成器的双向通信

yield 基础

示例代码(可运行)
💡yield vs return

return返回后函数结束;yield暂停执行并返回值,下次next从暂停处继续。生成器函数调用时不执行,返回生成器对象。

生成器实战

示例代码(可运行)

send 双向通信

示例代码(可运行)
预测输出
def g():
    yield 1
    yield 2
print(sum(g()))
找 Bug生成器只能遍历一次:第一次 list(gen) 已经把它耗尽,第二次得到空列表 []。
def g(): yield 1 yield 2 gen = g() print(list(gen)) print(list(gen)) # 以为还是[1,2]
填空题填写空白处的代码
def count(): n = 0 while True: n n += 1
选择题

生成器函数调用后返回?

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

@decorator 写在函数定义上方,它在「模块加载、函数被定义时」就执行一次,把原函数包装成新函数;之后每次调用,走的都是包装后的版本。带参数的装饰器本质是三层嵌套(外层收参数、中层收函数、内层收调用参数)。务必用 functools.wraps 保留原函数名和文档,否则调试栈和日志里全是 wrapper。

挑战任务

生成器挑战

简单+50 XP

用生成器实现逐行读取大文件(模拟)。

生成器挑战
2 个测试用例

课后作业

素数生成器

中等+20 XP

用生成器无限产出素数。

素数生成器
1 个测试用例