python3----生成器generator(yield)
2018-01-15 16:25
471 查看
# 列表推导式
a = [i for i in range(100) if not(i % 2) and (i % 3)]
print(a)
# 字典推导式
b = {i: i % 2 == 0 for i in range(10)}
print(b)
# 集合推导式
c = {i for i in [1, 3, 2, 6, 5, 1, 2, 3, 6, 5, 9, 5]}
print(c)
# 生成器推导式
d = (i for i in range(10))
print(d)
e = sum(i for i in range(100) if i % 2)
实例:
1 import random 2 3 def get_data(): 4 # 返回0到9之间的3个随机数 5 return random.sample(range(10), 3) 6 7 8 9 def consume(): 10 # 显示每次传入的整数列表的动态平增增均值 11 running_sum = 0 12 data_items_seen = 0 13 14 while True: 15 data = yield 16 data_items_seen += len(data) 17 running_sum += sum(data) 18 print('The running average is {}'.format(running_sum / float(data_items_seen))) 19 20 21 def produce(consumer): 22 # 产生序列集合,传递给消费函数(consumer) 23 while True: 24 data = get_data() 25 print('Produced {}'.format(data)) 26 consumer.send(data) 27 yield 28 29 if __name__ == '__main__': 30 consumer = consume() 31 consumer.send(None) 32 producer = produce(consumer) 33 34 for _ in range(10): 35 print('Producing...') 36 next(producer)
- generator是用来产生一系列值的
- yield则像是generator函数的返回结果
- yield唯一所做的另一件事就是保存一个generator函数的状态
- generator就是一个特殊类型的迭代器(iterator)
- 和迭代器相似,我们可以通过使用next()来从generator中获取下一个值
- 通过隐式地调用next()来忽略一些值
# 生成器的创建方式
# 1,列表生成式
# 2,函数
#
#
# yield vs return
# return 返回并中止函数
# yield 返回数据, if 关冻结当前执行过程..:
# next唤醒冻结的函数执行过程,继续执行,直到遇到下一个yield
#
# 函数有了yield之后
# 1.函数名加()就得到了一个生成器
# 2.return 在生成器里,代表生成器的中止,直接报错
#
# next
#
# 唤醒生成器的继续执行
#
# send("stop")
# 1.唤醒并继续执行
# 2.发送一个信息到生成器内部
相关文章推荐
- 关于Python生成器(Generator的yield、next、send)
- 有关Python初学者对于yield于生成器(generator)疑惑的终极解答
- python yield,生成器,generator
- Python关键字yield把函数变为generator生成器
- python yield generator (迭代器 生成器 协程) 理解
- 【Python】理解yield和generator(生成器)
- Python yield关键字 和 Generator(生成器)
- python的迭代器iterator和生成器generator(关键字yield)的简单理解
- python生成器Generator
- Python生成器generator之next和send运行流程
- 提高你的Python: 解释‘yield’和‘Generators(生成器)’
- Python中closure和generator的定义和使用 (兼谈yield命令)
- Python中生成器和yield语句的用法详解
- Python 生成器 generator
- python 高级特性:Generator(生成器)
- Python生成器(Generator)详解
- Python生成器generator之next和send运行流程
- Python 生成器(generator)解析
- 用python的生成器yield轻松解决8皇后的问题以及斐波拉契数列
- python yield和generators(生成器)