生成器:
1.如果一个函数调用时返回的是一个迭代器,那这个函数就叫做生成器(generator)
2.如果函数中包含yield语法,那这个函数就会变成生成器
作用:
这个yield的主要作用,可以使函数中断,并保持中断状态,
中断后,代码可以继续往下执行,过一段时间还可以再次重新调用这个函数,从上次yield的下一句开始执行
#例子1
def Foo(amount):
while amount >0:
amount -= 1
yield 1 #函数中有yield语法,函数就变成了生成器
print("握草,败家仔又来取钱!")
ATM = Foo(3) #默认生成器只能在创建时传一次参数(不过可以通过send()方法来赋值传参)
# print(ATM) #生成器在调用时不会直接执行 <generator object Foo at 0x000000000068BFC0>
print("本次提现:%s万元
"%ATM.__next__()) #需要通过__next__()方法来依次调用
print("本次提现:%s万元
"%ATM.__next__())
print("本次提现:%s万元
"%ATM.__next__())
#例子2
#使用yield实现单线程中的异步并发效果
'''
yield方法即可以赋值也可以有返回值
1. variable = yield 这样是给variable赋值
2. yield 100 这样是返回值(返回值为100)
'''
import time
def 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")