能否简化实现延迟返回输入值的Python生成器?
更简洁的延迟生成器实现
嘿,这个需求很有意思!你想要的是一个延迟生成器——每次通过send()传入的值,会在下一次迭代时被返回。你的现有实现用了三个变量,逻辑确实有点绕,其实我们只需要一个变量就能搞定,而且代码更清晰易懂。
简化版实现
def delayed_generator(): previous_value = None while True: current_value = yield previous_value previous_value = current_value
验证交互效果
我们来按照你的示例测试一下:
>>> g = delayed_generator() >>> g.send(None) # 启动生成器,返回初始的None(这一步是必须的,用于激活生成器) None >>> g.send('this') # 传入'this',返回上一次的None(示例中这一步无输出,符合预期) None >>> g.send('is') 'this' >>> g.send('delayed') 'is' >>> g.send('!') 'delayed'
完全匹配你想要的效果!
原理说明
这个实现的核心逻辑非常简单:
- 用
previous_value保存上一次传入的值,初始为None - 每次
yield previous_value:返回之前保存的值,同时暂停生成器,等待新的输入 - 接收新的
current_value后,把previous_value更新为这个新值,进入下一次循环
相比你原来的三个变量版本,这个实现只用了一个变量,逻辑线性且直观,维护起来也更方便。
内容的提问来源于stack exchange,提问作者Ziofil
相关产品推荐
相关产品推荐

