1. 生成器 只有在调用时才会生成相应的数据
 2 . 只记录当前的位置
3 . 只有一个__next__()

 

f = (x for x in range(10)) #一个简单的生成器 

print(f.__next__())

费波纳生成器(举例1)

def fib(max):

      n,a,b = 0, 0, 1

      while n < max:

           yeild b         #断点和返回数值

           a, b = b, a+b    # r = (b, a+b)    a = r[0]   b = r[1] 

            n = n + 1

        return '--done--'

g = fib(6)

print(g)  # 可以看出g 是生成器

while True:

         try:

             print(g.__next__())

          except StopIteration as e:

              print('not value',e.value)   # e.value = '--done--'

              break 

 

生成器包子(举例2)

def generate_baozi(name):

      print('%s准备吃包子了‘%name)

      while True:

               baozi = yield    #baozi 是一个[] 值

               print('%s 吃了 %s 个包子’%(name. baozi)        #产生了一个生成器

def consumer_baozi(name)

c = generate_baozi('A')     生成了一个生成器c

c1 = generate_baozi('B')    生成了一个生成器c1

c.__next__()              #运行一次生成器c 输出('%s准备吃包子了‘%name)

c1.__next__()            # 运行一次生成器 c2 输出('%s准备吃包子了‘%name)

for i in range(10):

        print('%s 准备好了包子‘%(name))

        c.send(i)  # 往生成器c传值

        c1.send(i)  #往生成器c1传值

 

consumer('alex') 

 

posted on 2018-05-16 20:47  python我的最爱  阅读(185)  评论(0编辑  收藏  举报