请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

middle 函数 里 为什么还需要 while True ?

图片描述
bobby 老师, 这里的while True 去掉会报错StopIteration,为什么一定要加这个 while True, sales_sum函数里面不是已经有个 while True 了吗?

正在回答 回答被采纳积分+3

2回答

samarkand 2020-03-02 16:23:25

主要是为了第二次send(None). 可以改成

def middle(key):
   final_result[key] = yield from sales_sum(key)
   print(key + "销量统计完成!!.")
   yield

1 回复 有任何疑惑可以回复我~
  • 我也这么写的,在子生成器的while下输出字符进行调试还是会多输出一次,但是中间生成器用while的话会多输出两次。但课程中说调用方send(None)的话会调用子生成器的next方法,那怎么退出啊= =
    回复 有任何疑惑可以回复我~ 2020-09-22 19:30:20
  • 卧槽用这个方法没多输出,是符合预期的
    回复 有任何疑惑可以回复我~ 2020-09-22 20:17:59
提问者 我是阿物 2019-05-09 15:34:01

我明白怎么回事了,m.send(None) 这一句的 send 调用后,程序会继续执行找到下一个yield 的值,因此需要借助 middle 函数 的while True 循环, 让程序再一次进入 到sales_sum 生成器的 while 循环中,但是因为 生成器是 惰性计算的,因此主程序没有继续对当前的 委托生成器 middle 使用 ,sales_sum 中的循环程序也不会继续进行了。

https://img1.sycdn.imooc.com//szimg/5cd3d7880001036a04450314.jpg

https://img1.sycdn.imooc.com//szimg/5cd3d7880001308803010406.jpg


0 回复 有任何疑惑可以回复我~
  • bobby #1
    正解!
    回复 有任何疑惑可以回复我~ 2019-05-10 12:24:16
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信