Python 生成器 generator之next和send运行流程
来源:互联网 发布:mac ox驱动下载 编辑:程序博客网 时间:2024/04/27 23:42
http://blog.csdn.net/pfm685757/article/details/49924099
对于普通的生成器,第一个next调用,相当于启动生成器,会从生成器函数的第一行代码开始执行,直到第一次执行完yield语句(第4行)后,跳出生成器函数。
然后第二个next调用,进入生成器函数后,从yield语句的下一句语句(第5行)开始执行,然后重新运行到yield语句,执行后,跳出生成器函数,
后面再次调用next,依次类推。下面是一个列子:
1 def consumer():2 r = 'here'3 for i in xrange(3):4 yield r5 r = '200 OK'+ str(i)
6
7 c = consumer()8 n1 = c.next()9 n2 = c.next()10 n3 = c.next()
下面来着重说明下send执行的顺序。当第一次send(None)(对应11行)时,启动生成器,从生成器函数的第一行代码开始执行,直到第一次执行完yield(对应第4行)后,跳出生成器函数。这个过程中,n1一直没有定义。
下面运行到send(1)时,进入生成器函数,注意这里与调用next的不同。这里是从第4行开始执行,把1赋值给n1,但是并不执行yield部分。下面继续从yield的下一语句继续执行,然后重新运行到yield语句,执行后,跳出生成器函数。
即send和next相比,只是开始多了一次赋值的动作,其他运行流程是相同的。
1 def consumer():2 r = 'here'3 while True:4 n1 = yield r5 if not n1:6 return7 print('[CONSUMER] Consuming %s...' % n1)8 r = '200 OK'+str(n1)910 def produce(c):11 aa = c.send(None)12 n = 013 while n < 5:14 n = n + 115 print('[PRODUCER] Producing %s...' % n)16 r1 = c.send(n)17 print('[PRODUCER] Consumer return: %s' % r1)18 c.close()1920 c = consumer()21 produce(c)
运行结果:
[PRODUCER] Producing 1...
[CONSUMER] Consuming 1...
[PRODUCER] Consumer return: 200 OK1
[PRODUCER] Producing 2...
[CONSUMER] Consuming 2...
[PRODUCER] Consumer return: 200 OK2
[PRODUCER] Producing 3...
[CONSUMER] Consuming 3...
[PRODUCER] Consumer return: 200 OK3
[PRODUCER] Producing 4...
[CONSUMER] Consuming 4...
[PRODUCER] Consumer return: 200 OK4
[PRODUCER] Producing 5...
[CONSUMER] Consuming 5...
[PRODUCER] Consumer return: 200 OK5
- Python生成器generator之next和send运行流程
- Python生成器generator之next和send运行流程
- Python 生成器 generator之next和send运行流程
- Python生成器generator之next和send运行流程
- Python生成器generator之next和send的运行流程(详解)
- Python生成器generator的send和next
- 关于Python生成器(Generator的yield、next、send)
- Python之生成器Generator
- Python 3.6 生成器之Send方法
- python高级特性之生成器(generator)
- 【Python】理解yield和generator(生成器)
- Python yield关键字 和 Generator(生成器)
- [Python]生成器(generator)
- Python 生成器 generator
- python生成器Generator
- Python-----生成器:generator
- Python 生成器 generator
- Python 生成器(generator)
- Cbuilder一定要包含有UnitN.cpp
- 深入理解C指针学习笔记七之动态内存管理
- 正则表达式全部符号解释
- 动态污点分析——隐式流造成的漏报和误报
- 设计模式六大原则(4):接口隔离原则
- Python 生成器 generator之next和send运行流程
- 学习C#的第一个程序:笔记查找与记录
- C++实验3-2-本月有几天?
- 正则表达式、Math类、StringBuffer类和StringBuilder类
- 一个10进制数二进制表示1的个数,负数用补码
- 字符编码简介
- c++作业2
- net.sf.JSONObject学习
- 使用usort()函数排序二维数组