国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > Python高级 > python生成器中的send()方法和next()方法

python生成器中的send()方法和next()方法

头像

爱喝马黛茶的安东尼

2019-06-29 09:58:264693浏览 · 0收藏 · 0评论

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

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

def consumer():
    r = 0
    for i in xrange(3):
        yield r
        r = '200 OK'+ str(i)

c = consumer()
n1 = c.next()
n2 = c.next()
n3 = c.next()

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

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

相关推荐:《Python视频教程》

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

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

def consumer():
    r = 'here'
    while True:
        n1 = yield r   #这里的等式右边相当于一个整体,接受回传值
        if not n1:
            return
        print('[CONSUMER] Consuming %s...' % n1)
        r = '%d00 OK' % n1

 def produce(c):
     aa = c.send(None)
     n = 0
     while n < 5:
         n = n + 1
         print('[PRODUCER] Producing %s...' % n)
         r1 = c.send(n)
         print('[PRODUCER] Consumer return: %s' % r1)
     c.close()

 c = consumer()
 produce(c)

运行结果:

[PRODUCER] Producing 1...
[CONSUMER] Consuming 1...
[PRODUCER] Consumer return: 100 OK
[PRODUCER] Producing 2...
[CONSUMER] Consuming 2...
[PRODUCER] Consumer return: 200 OK
[PRODUCER] Producing 3...
[CONSUMER] Consuming 3...
[PRODUCER] Consumer return: 300 OK
[PRODUCER] Producing 4...
[CONSUMER] Consuming 4...
[PRODUCER] Consumer return: 400 OK
[PRODUCER] Producing 5...
[CONSUMER] Consuming 5...
[PRODUCER] Consumer return: 500 OK

Python创建生成器的两种方法

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

母与子免费观看大全电视剧邻居大.. | 空姐4免费高清完整版观看| 老公不在家憋不住了该怎么办| 超星阅读平台登录入口| 白日梦我 电视剧| 腿张开我要添到你高潮H漫画软件| 韩国男按摩师吸乳房会得乳腺癌吗 | 趁女朋友洗澡C她闺蜜| 女人高潮抖动多久能恢复正常| 酒鬼酒股票| 《饥饿妻子》完整版在线观看| 饭桌上张开腿给公| 白色变态蕾丝超薄开档连身袜| 法国《口咬》电影完整版 | 胡乱说深见君| 《疯狂72小时》韩剧| 亲爱的爸爸【父女】笔趣阁负责的 | 《好好疼爱里面》免费看| 4虎CVT4WD入口免费| 免费网站在线观看大全电视剧| 《晚上准备好纸巾》| 《酒店激战》动漫1-5集免费观.| 韩漫网站| 《枕边欢情》电影免费观看| 公与媳2电视剧免费观看| 《少妇交换做爰6| 真人做爰45分钟| 禁忌1蜜桃熟了| 《性88分钟》| 欧美人动物PPT免费模板大全| 麻豆免费观看A片WWW| 甜蜜惩罚~我是看守专用宠物 | 机械革命笔记本| 少女与狗2在线观看免费版高清| 呼唤生活| 为什么妓女磨两下就很多水| 日韩精品一区二区三区| 《乳牛牧场的奶牛娘》动漫免费观. | 代练通| 打扑克| 女朋友太骚了每次进去都觉得很