2026-10-22 09:31:40
Python中的生成器(Generator)和yield关键字是用于高效处理大规模数据或实现惰性求值的重要工具。 生成器通过yield关键字逐个产生值,而非一次性生成所有数据,从而节省内存并支持协程等高级功能。以下是详细解析:
1. 生成器表达式 vs 列表推导调用生成器函数时,函数体不立即执行,而是返回生成器对象。
每次调用next()或迭代时,执行到yield暂停并返回值,下次从暂停处继续。
def countdown(n): while n > 0: yield n # 暂停并返回n n -= 1gen = countdown(3)print(next(gen)) # 输出 3print(next(gen)) # 输出 2启动协程:首次调用next()或send(None)执行到第一个yield。
发送数据:send(value)将值赋给yield左侧变量,并继续执行。
def recv(): print('Ready') while True: n = yield # 接收外部数据 print('Got:', n)coro = recv()coro.send(None) # 启动协程coro.send(10) # 输出 "Got: 10"生成器通过yield实现惰性求值和协程通信,显著提升内存效率和程序灵活性。掌握生成器表达式、函数及协程用法,能高效处理流式数据、构建复杂管道,甚至实现轻量级并发。