老师,为什么customer()函数要写while true呢?

老师,为什么customer()函数要写while true呢?

老师,为什么customer()函数要写while true呢?prodoct()函数内不是已经循环执行send(i)函数了吗?

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

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小猿 2023-08-07 14:32:40

同学,你好!while true 是为了取send(i)发送给yield的值,send一个值,yield 会取出就个值,如果不用循环就只能取出第一次传递过去的值

https://img1.sycdn.imooc.com//climg/64d089a709f5cde007610599.jpg

同学可理解下课上代码:

https://img1.sycdn.imooc.com//climg/64d08ab8094140dd03780570.jpg

上图f3.send(2)、f3.send(3)是一个一个发送值的,等同学于生产者中for循环内的c.send()

https://img1.sycdn.imooc.com//climg/64d08ba60968a40904110125.jpg

但是fun3函数接收的时候,,老师也是逐个接收的,有3个yeild,没有使用循环接收。在是生产者、消费者老师是使用循环来取yield值,看到yield 当前调用函数执行完毕,再调用send()继续执行fun3函数的后续代码。

send(None)执行的是35行代码,将yield 1 赋给num,num值为1 作为函数返回值,r1值为1

f3.send(2)执行的是36、37行代码num值为2,num1的值为12作为函数返回值,所以r2值也是12

f3.send(3)执行38、39行代码,原理是相同的。


祝学习愉快~

  • 提问者 慕田峪6467393 #1

    老师,我可以简单的理解为,无论执行几次send(i),一个yield只能赋值第一次的值,如果想要多次赋值,就必须循环yield的进行赋值,可以这样理解吗?

    2023-08-08 10:58:18
  • 好帮手慕小猿 回复 提问者 慕田峪6467393 #2

    同学,你好!

    不是的,一个send()执行到一个yield  语句,第二次send() 执行到第二个yield 语句。以下图为例,第一次send(None)执行到35行代码 num=yield 1,第二次send(2)执行36、37行代码,执行到num1=yield num+10。同学说的想要多次赋值可以用图中的按顺序写yield ,也可以使用while 循环赋值。不是必须使用循环yield 赋值

    https://img1.sycdn.imooc.com//climg/64d1bad609d9e1c203410517.jpg


    祝学习愉快~

    2023-08-08 11:52:25
  • 提问者 慕田峪6467393 回复 好帮手慕小猿 #3

    明白了,谢谢老师

    2023-08-08 14:14:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师