python语法之生成器
一、生成器
1、定义
但凡在函数内部定义了yield,调用函数时,函数代码体不会执行,得到的返回值就是一个生成器。
生成器内置有__iter__()和__next__()方法,所以生成器本质就是一个迭代器。
2、关键字:yield
若函数体内包含yield关键字,在调用函数时,并不会执行函数体代码,得到的返回值即是生成器对象。
def my_range(start,stop,step=1): while start < stop: yield start start += step #g_range就是一个生成器 g_range = my_range(1,5,2) print(g_range) #<generator object my_range at 0x000000000293D8E0>
#for循环迭代 for i in my_range(1,9,2): print(i)
3、yield 与return 的区别
区别 | yield | return |
相同点 | 返回值的个数都是无限的 | 返回值的个数都是无限的 |
不同点 | 返回多个值 | 返回一个值 |
二、yield表达式应用
def init(func): def wrapper(*args,**kwargs): g = func(*args,**kwargs) next(g) return g return wrapper @init def eater(): print('ready to eat') while True: food = yield print('get the food:%s,and start to eat'%food) g= eater() g.__next__() g.send('bone') g.send('milk') g.send('bread')