Python_生成器generator

生成器:调用时返回一个迭代器

如果一个函数中包含yield语法,那这个函数就会变成一个生成器

例1:

 1 def draw_money(draw):              #这个函数称为生成器
 2     while draw >0:
 3         draw -=100
 4         yield 100           #100 是返回的值
 5         print('取钱!')
 6 atm = draw_money(300)
 7 print(type(atm))
 8 print(atm.__next__())
 9 print(atm.__next__())
10 print('干了一件其他的事')       #代码执行中断也不影响下一次的继续执行
11 print(atm.__next__())
12 # print(atm.__next__())       #代码已经执行完了,添加这行会报错
draw_money

结果:

1 100
2 取钱!
3 100
4 干了一件其他的事
5 取钱!
6 100
result

例2:

import time

def customer(name):
    print('我( %s )来吃冰淇淋啦'% name)
    while True:
        ice_cream = yield
        print('我是 ( %s ) ,我吃了冰淇淋( %s )' % (name, ice_cream))

def producer(name):
    ice_1 = customer('Vera')
    ice_2 = customer('Presly')
    ice_1.__next__()
    ice_2.__next__()

    print('我( %s )来做冰淇淋了!'% name)
    for i in range(5):
        time.sleep(2)
        print('我把这个冰淇淋叫做冰淇淋( %s )!!!'% i)
        ice_1.send(i)
        ice_2.send(i)
producer('balala')
ice_cream

结果:

我( Vera )来吃冰淇淋啦
我( Presly )来吃冰淇淋啦
我( balala )来做冰淇淋了!
我把这个冰淇淋叫做冰淇淋( 0 )!!!
我是 ( Vera ) ,我吃了冰淇淋( 0 )
我是 ( Presly ) ,我吃了冰淇淋( 0 )
我把这个冰淇淋叫做冰淇淋( 1 )!!!
我是 ( Vera ) ,我吃了冰淇淋( 1 )
我是 ( Presly ) ,我吃了冰淇淋( 1 )
我把这个冰淇淋叫做冰淇淋( 2 )!!!
我是 ( Vera ) ,我吃了冰淇淋( 2 )
我是 ( Presly ) ,我吃了冰淇淋( 2 )
我把这个冰淇淋叫做冰淇淋( 3 )!!!
我是 ( Vera ) ,我吃了冰淇淋( 3 )
我是 ( Presly ) ,我吃了冰淇淋( 3 )
我把这个冰淇淋叫做冰淇淋( 4 )!!!
我是 ( Vera ) ,我吃了冰淇淋( 4 )
我是 ( Presly ) ,我吃了冰淇淋( 4 )
result

 

posted @ 2018-09-06 20:33  yin_zhaozhao  阅读(85)  评论(0编辑  收藏  举报