生成器: 1.如果一个函数调用时返回的是一个迭代器,那这个函数就叫做生成器(generator) 2.如果函数中包含yield语法,那这个函数就会变成生成器 作用: 这个yield的主要作用,可以使函数中断,并保持中断状态, 中断后,代码可以继续往下执行,过一段时间还可以再次重新调用这个函数,从上次yield的下一句开始执行
#例子1def Foo(amount): while amount >0: amount -= 1 yield 1 #函数中有yield语法,函数就变成了生成器 print("握草,败家仔又来取钱!")ATM = Foo(3) #默认生成器只能在创建时传一次参数(不过可以通过send()方法来赋值传参)# print(ATM) #生成器在调用时不会直接执行print("本次提现:%s万元\n"%ATM.__next__()) #需要通过__next__()方法来依次调用print("本次提现:%s万元\n"%ATM.__next__())print("本次提现:%s万元\n"%ATM.__next__())
#例子2#使用yield实现单线程中的异步并发效果'''yield方法即可以赋值也可以有返回值1. variable = yield 这样是给variable赋值2. yield 100 这样是返回值(返回值为100)'''import timedef consumer(name): print("%s 准备吃包粽子了"%name) while True: zongzi = yield #send(i)会给yield赋值,然后yield在赋值给zongzi这个变量 print("粽子[%s]来了,被[%s]吃了!"%(zongzi ,name))def producer(name): a = consumer('A') b = consumer('B') a.__next__() b.__next__() print("%s准备做粽子了!"%name) for i in range(10): time.sleep(1) print("做了2个粽子!") a.send("最大的粽子") #给yield赋值 b.send(i) #给yield赋值producer("eric")