python生成器

为甚要用生成器?

  优点是不占用存存空间,只有调用的时候才生成对应的元素。

  但是它只有__next__() 方法调用,只记录当前的位置。

先看下列表生成式

 i*2 也可以是调用一个函数 

list = [ i*2 for i in range(10)]
print(i)

生成器的写法

list = ( i *2 for i in range(10))

f = __next__()

print(f)

 

__next__()

只能一个一个调用

一个重要的方法是send()

它既可以传参数又可以调用__next__()

 

import time
def consumer(name):
    print("%s 准备吃包子啦!" %name)
    while True:
       baozi = yield

       print("包子[%s]来了,被[%s]吃了!" %(baozi,name))


def producer(name):
    c = consumer('A')
    c2 = consumer('B')
    c.__next__()
    c2.__next__()
    print("老子开始准备做包子啦!")
    for i in range(10):
        time.sleep(1)
        print("做了2个包子!")
        c.send(i)
        c2.send(i)

producer("alex")

 

yield  用了这个词就成了生成器

  这个函数保存了执行记录,切换之间可以干别的事,有种像单线程下的多线程,(有叫携程,比线程小的,寄生在线程里面)

 

posted @ 2018-08-12 01:13  张丶耀庆  阅读(180)  评论(0编辑  收藏  举报