生成器

列表生成式:[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]开始吃包子了

posted on 2018-03-04 22:13  唐僧归来  阅读(114)  评论(0)    收藏  举报

导航