生成器
列表生成式:[i*2 for i in range(10)]
生成器(generator):(i*2 for i in range(10))
生成器只有在调用时才会生成相应的数据 ,不占用空间
每次调用完只记录当前的位置,可以向后,不能向前
调用方式用两种:1.name.__next__() 2.name.send()
例如:携程(单线程的并行效果):
import time
def consumer(name):
print("%s来吃包子了" %name)
while True:
baozi = yield
print("包子[%s]来了,[%s]开始吃包子了"%(baozi,name))
c = consumer("chenzhonghua")
c.__next__()
b1 = "大肉馅"
c.send(b1)
def producer(name):
c = consumer("A")
c2 = consumer("B")
c.__next__()
c2.__next__()
for i in range(10):
time.sleep(1)
print("做了两个包子,一人一个")
c.send(i)
c2.send(i)
producer("alex")
执行结果》》》》》
chenzhonghua来吃包子了
包子[大肉馅]来了,[chenzhonghua]开始吃包子了
A来吃包子了
B来吃包子了
做了两个包子,一人一个
包子[0]来了,[A]开始吃包子了
包子[0]来了,[B]开始吃包子了
做了两个包子,一人一个
包子[1]来了,[A]开始吃包子了
包子[1]来了,[B]开始吃包子了
做了两个包子,一人一个
包子[2]来了,[A]开始吃包子了
包子[2]来了,[B]开始吃包子了