Python 3.3中新出现的句法:yield from
如果生成器函数需要产出另一个生成器生成的值,传统的解决方法是使用嵌套的for循环。
ps: 另一个生成器这里没有看懂,哪来的另一个生成器。
标准库中有chain函数,假如自己实现chain生成器:
1 def chain(*iterables): 2 for it in iterables: 3 for i in it: 4 yield i 5 6 7 8 9 def chain_v2(*iterables): 10 for it in iterables: 11 yield from it # yield from it 完全代替了上面那种定义方式里内层的for循环 12 13 14 15 s = 'ABC' 16 t = tuple(range(3)) 17 18 r = list(chain(s, t)) 19 print(r) #['A', 'B', 'C', 0, 1, 2] 20 21 22 r2 = list(chain_v2(s,t)) 23 print(r2) #['A', 'B', 'C', 0, 1, 2]
作用:把不同的生成器结合在一起使用。
除了代替循环之外,yield from还会创建通道,把内层生成器直接与外层生成器的客户端联系起来。把生成器当成协程使用时,这个通道特别重要,不仅能为客户端代码生成值,还能使用客户端代码提供的值。
1
标签:
生成器、生成器函数、迭代器
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构