middle函数中的while Ture 是如何退出的

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

wireless_ZDJ

2019-02-13

如题 老师写的代码中并没有终止middle函数中的while Ture ,但是运行程序并没有被while Ture卡住,那么是如何做到让middle函数停止的呢?

我看到老师关于这个回答了
但是
是middle里的while true
不是sales_sum里的while true

写回答

2回答

bobby

2019-02-17

middle中调用了yield from这个就是说这里面在子协程中和调用方之间直接建立了通道 所以sales_sum
中return之后 middle也就return了 也就跳出了while循环

0
2
bobby
回复
wireless_ZDJ
yield from处理的是sales_num中的stopiteration 而不是处理父协程的stop这个我在yield from的原理中讲解过
2019-02-19
共2条回复

bobby

2019-02-15

你能贴一下代码吗?

0
2
放牛班的春天0
回复
wireless_ZDJ
m.send(None)使得sales_num生成器执行结束了, middle执行完print了, while True会让程序继续从yield from这一行开始执行,则此时又进入到yield from sales_num中, 到 x = yield这一步暂停, 因为m.send(None)是从上一个暂停的地方执行到下一个yield语句暂停,然后因为main中的for进入下一层循环了,m对象又被重新赋值了, 所以之前的状态都消失了, while True没有退出过,只是生成器重新初始化了而已
2019-11-12
共2条回复

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

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

2121 学习 · 551 问题

查看课程