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

posted @   limalove  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示