def fib(max): n ,a,b =0,0,1
while n <max:
print(b)
a,b=b,a+b
n=n+1
return "done"
print(fib(10))
而实现生成器的转换,只需要修改一步。将print(b),改成yield b即可
def fib(max): n,a,b=0,0,1
while n<max:
# print(b)
yield b ##有yield存在时就不叫函数了,而叫生成器
a,b=b,a+b
n=n+1
return "done"
print(fib(10))
f=fib(10)
g=fib(6)
while True:
try:
x=next(g)
print("g",x)
except StopIteration as e: #异常起个名字叫 e
print("Generator return value:",e.value)
break
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
生成器并行运行
import time
def consumer(name):
print("%s eat!"%name)
while True:
baozi=yield #yield没有返回值空的
print("包子%s来了,被%s吃了"%(baozi,name))
# c=consumer("alex")
# c.__next__()
# b1="韭菜馅"
# b2="肉馅"
# c.send(b1) ##调用b1,同时给传值
# c.__next__()
#携程(nginx异步处理)
def producer(name):
c1=consumer("A")
c2=consumer("B")
c1.__next__()
c2.__next__()
print("准备包子!!!")
for i in range(10):
time.sleep(2)
print("做一个,两人分着吃!")
c1.send(i)
c2.send(i)