定义:一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器。
代码:
def cash_out(amount):
while amount >0:
amount -=1
yield 1
print(“擦,又来取钱了。。败家子”)
ATM = cash_out(5)
print(“取到钱 %s 万” % ATM.__next__())
print(“花掉花掉”)
print(“取到钱 %s 万” % ATM.__next__())
print(“取到钱 %s 万” % ATM.__next__())
print(“花掉花掉”)
print(“取到钱 %s 万” % ATM.__next__())
print(“取到钱 %s 万” % ATM.__next__())
print(“取到钱 %s 万” % ATM.__next__())
print(“取到钱 %s 万” % ATM.__next__())
作用:
这个yield的主要效果,就是可以使函数中断,并保存中断状态,中断后代码可以继续往下执行,
def cash_money(amount):
while amount >0:
amount -= 100
yield 100
print(“又来取钱了”)
ATM = cash_money(500)
print(type(ATM))
print(ATM.__next__())
print(ATM.__next__())
print(“钱花完了。。”)
print(ATM.__next__())
生成器异步:
import time
def consumer(name):
print("%s 准备吃包子啦!" %name)
while True:
baozi = yield
print("包子[%s]来了,被[%s]吃了!" %(baozi,name))
def producer(name):
c = consumer('A')
c2 = consumer('B')
c.__next__()
c2.__next__()
print("老子开始准备做包子啦!")
for i in range(10):
time.sleep(1)
print("做了2个包子!")
c.send('TengLan')
c2.send(i)
producer("alex")