生成器作为可交互的执行单元,其独特之处在于yield关键字支持双向通信,这为外部控制内部逻辑提供了可能。
与传统迭代器不同,生成器通过yield实现了双向数据流动,既能输出计算结果,又能接收外部指令,这种特性使其成为可编程的协程单元。
当执行yield x时,生成器会暂停并将x传递给调用者;后续通过send(value)方法传入的值会替换整个yield表达式,从而实现对内部状态的修改。
next(gen)或gen.send(None)进行初始化cmd = yield result才能保留传入值yield x会丢弃外部传入的数据通过send方法传递不同类型的参数,可以实现对生成器行为的精确控制:
典型实现示例:
def stateful_processor():throw()方法提供了更直接的干预方式,能够立即中断当前执行流程:
通过yield from构建的生成器委托链,可以实现控制指令的自动透传:
生成器的双向通信机制为程序架构提供了灵活的控制方式,通过合理运用这些特性可以构建出响应式的异步处理系统。