1. 生成器 只有在调用时才会生成相应的数据
2 . 只记录当前的位置
3 . 只有一个__next__()
f = (x for x in range(10)) #一个简单的生成器
print(f.__next__())
费波纳生成器(举例1)
def fib(max):
n,a,b = 0, 0, 1
while n < max:
yeild b #断点和返回数值
a, b = b, a+b # r = (b, a+b) a = r[0] b = r[1]
n = n + 1
return '--done--'
g = fib(6)
print(g) # 可以看出g 是生成器
while True:
try:
print(g.__next__())
except StopIteration as e:
print('not value',e.value) # e.value = '--done--'
break
生成器包子(举例2)
def generate_baozi(name):
print('%s准备吃包子了‘%name)
while True:
baozi = yield #baozi 是一个[] 值
print('%s 吃了 %s 个包子’%(name. baozi) #产生了一个生成器
def consumer_baozi(name)
c = generate_baozi('A') 生成了一个生成器c
c1 = generate_baozi('B') 生成了一个生成器c1
c.__next__() #运行一次生成器c 输出('%s准备吃包子了‘%name)
c1.__next__() # 运行一次生成器 c2 输出('%s准备吃包子了‘%name)
for i in range(10):
print('%s 准备好了包子‘%(name))
c.send(i) # 往生成器c传值
c1.send(i) #往生成器c1传值
consumer('alex')