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

来源:12-9 生成器进阶-yield from-2

我是阿物

2019-05-09

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

写回答

2回答

samarkand

2020-03-02

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

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

1
2
东泽XD
卧槽用这个方法没多输出,是符合预期的
2020-09-22
共2条回复

我是阿物

提问者

2019-05-09

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

//img.mukewang.com/szimg/5cd3d7880001036a04450314.jpg

//img.mukewang.com/szimg/5cd3d7880001308803010406.jpg


0
1
bobby
正解!
2019-05-10
共1条回复

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程