在yield_from_example.py文件里,仔细看了这个统计sum的例子:
def middle(key):
while True:
final_result[key] = yield from sales_sum(key)
print(key+“销量统计完成!!.”)
我对于这个委托生成器为什么要使用while True表示不理解:
1.单一商品,统计完成后,委托生成器也就close了,实际上也就while循环了一次,为什么还需要while True?
2.while True明明是无限循环,为什么可以循环一次后就可以close委托生成器了呢?
我尝试将while True去掉,代码写成如下这样,其他不变:
def middle(key):
#while True:
final_result[key] = yield from sales_sum(key)
print(key+“销量统计完成!!.”)
此时报StopIteration异常,应该是子生成器报的,如果这个结论成立,就有以下推论:主调用方发送到None时,因为子生成器调到return了,所以报这个异常,但是yield from存在呀!能处理这个异常。这么说while True是否存在是yield from能否正确处理子生成器异常的关键,可是为什么会这样?
不管while True是否存在,yield from和后面的print销量统计完成都会执行一遍,为什么有没有while True成为是否抛出StopIteration的影响因素?
按照上面的结果,当主调用方send数据到子生成器时,依赖委托生成器的while True。试验了下,在不用send、只需要委托和子生成器yield回来值的场景下,不使用while True也不会有异常,这又是为什么?