这篇文章将为大家详细讲解有关怎么使用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()就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。