hi,all,关于第一次send(None)的参数必须是None,我有些疑问?
Topic source第一次执行到
m = yield 5
首先执行yield 5,执行后没有返回值,即m为空,返回值需要下次调用时赋予。yield 5执行完后就停止继续执行,可以理解为执行指针停止在yield 5的前面,等待给变量m赋值的位置。下次调用generator函数时从给m赋值开始执行。
generator函数执行后,遇到yield表达式,执行该表达式后就停止执行,返回yield表达式中yield后部的值。例如yield r,返回r 作为generator函数执行后的结果给调用者。yield表达式本身没有返回值,它的返回值需要等到下次调用generator函数时,由send(args)函数的参数赋予。
因为第一次调用yield表达式,还没有接受参数赋值的变量,所以只能传递None作为send的参数。
第一次必须是send(None),这是用于启动生成器,如果不是None会报错
第一次send(None)执行到yield r,返回produce,第二次send(1),则从n接收send值1开始,一直执行到yield r,再次返回produce
- 1
aio2014
c.send(None)是执行到哪?m = yield 5么?如果是那为什么说第一次没有yield语句来接收这个值?如果不是,那为什么c.send(None)的返回值是5?