生成器的作用是:节省运行空间,只有在循环到需要用的元素时才会生成相对应的数据。一般用__next__()取得相对应的位置元素的值
生成器产生方式有2中:
1.a=(i*2 for i i n range(10))
2.用yield来生成,可以将一个函数变成生成器
举个例子来说明:
yield将函数变成了生成器,起中断程序的作用,首先constomer(“xiangxiao”)将参数传给了constomer(name),然后c.__next__()调用了yield,并且执行了第一个输出“xiangxiao准备吃包子了”。接下来呢,调用了producer("xiangxiao")函数,它将“A”和“B”传给了constomer(name),并且调用yield,通过这个循环,以及send参数,将i的值传给yield并且调用了,这就是串行下的多线程并行
import time
def constomer(name):
print("%s准备吃包子啦"%name)
while True:
baozi=yield
print("%s准备被%s吃掉了"%(baozi,name))
return 'done--'
c=constomer("xiangxiao")
c.__next__()
# b="韭菜馅"
# c.send(b)
def producer(name):
c=constomer("A")
c2=constomer("B")
c.__next__()
c2.__next__()
print("老子准备开始吃包子啦")
for i in range(10):
time.sleep(1)
print("做了一个包子分两半!")
c.send(i)
c2.send(i)
producer("xiangxiao")