Python生成器中的Send()方法和next()方法

时间:2024-10-12 09:51:24

1、在异步IO的使用中,生成器是最基本的实现方法。python生成器有两个主要方法:send和next。今天我们恝依在绌来看看这两者的用法和联系。在每个代码段中,第一个下一个调用相当于启动生成器。它将从生成器函数的第一行执行,直到第一次执行yield语句(第4行)。然后,第二个next调用,在进入generator函数之后,从yield语句的下一个句子(第5行)开始执行,然后再次运行到yield语句。执行之后,它跳出生成器函数并再次调用next,依此类推。

Python生成器中的Send()方法和next()方法

2、这里我们以经典的生产者-消费者模型为例(摘自廖雪峰的博客)

Python生成器中的Send()方法和next()方法

3、实际上,next()和send()在某种意义上有相似的函数。不同的是send()可以传入yield表达式的值,而next(傧韭茆鳟)不能传递特定的值,只传递none。因此,我们可以认为C.next()和C.send(none)具有相同的效果。第一次调用时,请使用next()语句或send(none)。不能使用send发送非none的值。否则,将发生错误,因为没有Python yield语句来接收此值。相关推荐:Python视频教程发送执行的顺序如下所述。首先记住,N1=yield R是从右向左执行的。当第一次send(none)时(对应11行),启动生成器,从生成函数代码的第一行开始执行,直到第一次执行yield(对应第四行),生成器函数跳出。在这个过程中,N1没有被定义。运行send(1)时,进入generator函数。此时,将yield r看作一个整体,给它赋值并返回它。这相当于将1赋给N1,但不执行yield部分。接下来,继续从yield的下一个语句执行,然后重新运行到yield语句。执行后,跳出生成器函数。也就是说,与next相比,send只多启动了一个赋值操作,其他运行的进程也是一样的。

Python生成器中的Send()方法和next()方法

4、运行结果:

Python生成器中的Send()方法和next()方法

5、Python中创建生成器的两种方法

© 手抄报圈