怎么使用python生成器中的发送()和next ()

  介绍

这篇文章将为大家详细讲解有关怎么使用python生成器中的发送()和(),文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

在异步IO的使用时,发电机是最基本的一个实现方法.python生成器有两个主要方法,一个是发送一个是下一个。今天我们来看看两者的用法和联系。在每段代码中,第一个未来调用,相当于启动生成器,会从生成器函数的第一行代码开始执行,直到第一次执行完收益率语句(第4行)后,跳出生成器函数,然后第二个下调用,进入生成器函数后,从收益率语句的下一句语句(第5行)开始执行,然后重新运行到收益率语句,执行后,跳出生成器函数后面再次调用接下来,依次类推。

这里我们用经典的生产者——消费者模型举个例子(摘自廖雪峰的博客)

def 消费者():   ,,,r =0   ,,,for 小姐:拷贝xrange (3):   ,,,,,,,油品收率r   ,,,,,,,r =, & # 39; 200年,好# 39;+,str(我)      时间=c 消费者()   时间=n1  c.next ()   时间=n2  c.next ()   n3 =, c.next ()

实际上next()和()发送在一定意义上作用是相似,的区别是发送()可以传递产量表达式的值进去,而下一个()不能传递特定的值,只能传递没有进去。因此,我们可以看做c.next()和c.send(没有)作用是一样的。

第一次调用时,请使下()语用句或是发送(没有),不能使用发送发送一个非所有的值,否则会出错的,因为没有Python收益率语句来接收这个值。

下面说明下发送执行的顺序。先记住,n1收益率=r这句话是从右往左执行的。当第一次发送(一)(对应11行)时,启动生成器,从生成器函数的第一行代码开始执行,直到第一次执行完收益率(对应第4行)后,跳出生成器函数。这个过程中,n1一直没有定义。

运行到发送(1)时,进入生成器函数,此时,将产生r看做一个整体,赋值给它并且传回。此时即相当于把1赋值给n1,但是并不执行收益部分。下面继续从收益率的下一语句继续执行,然后重新运行到收益率语句,执行后,跳出生成器函数。即发送和下相比,只是开始多了一次赋值的动作,其他运行流程是相同的。

def 消费者():   ,,,r =, & # 39;这是# 39;   ,,,while 正确的:   ,,,,,,,n1 =,油品收率r ,, #这里的等式右边相当于一个整体,接受回传值   ,,,,,,,if  not  n1:   ,,,,,,,,,,,回来   ,,,,,,,印刷(& # 39;(消费者),Consuming  % s……& # 39;, %, n1)   ,,,,,,,r =, & # 39; % d00 好# 39;%,n1      ,def 生产(c):   ,,,,aa =, c.send(没有)   ,,,,n =0   ,,,,while  n  & lt;, 5:   ,,,,,,,,n =, n  + 1   ,,,,,,,,印刷(& # 39;(生产者),Producing  % s……& # 39;, %, n)   ,,,,,,,,r1 =, c.send (n)   ,,,,,,,,印刷(& # 39;(生产者),Consumer 回报:,% & # 39;,%,r1)   ,,,,c.close ()=,c 消费者()   ,生产(c)

运行结果:

(生产者),Producing  1…   (消费者),Consuming  1…   (生产者),Consumer 返回:100,好吧   (生产者),Producing  2…   (消费者),Consuming  2…   (生产者),Consumer 返回:200,好吧   (生产者),Producing  3…   (消费者),Consuming  3…   (生产者),Consumer 返回:300,好吧   (生产者),Producing  4…   (消费者),Consuming  4…   (生产者),Consumer 返回:400,好吧   (生产者),Producing  5…   (消费者),Consuming  5…   (生产者),Consumer 回报:,500,好

关于怎么使用python生成器中的发送()和next()就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

怎么使用python生成器中的发送()和next ()