Python_生成器generator

时间:2023-03-09 22:25:12
Python_生成器generator

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

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

例1:

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

draw_money

结果:

 100
取钱!
100
干了一件其他的事
取钱!
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