生成器
生成器时一个自定义的迭代器
yield
只能在函数内部定义,每一次yield都会往生成器中添加值,yield可以保存函数的暂停状态
如何实现生成器:但凡在函数内部定义了yield,调用函数时不会执行函数体代码,会返回一个结果,该结果就是生成器
当通过__next__()取值时才会执行函数体代码
def func():
print(A)
yield a
print(B)func
yield b
print(C)
yield c
func() # 不会执行
res = func()
print(next(res))
print(next(res))
print(next(res))
自定义range功能,创建一个自定义生成器
def my_range(start,stop,step):
while start < stop:
yield start
start += step
g_range = my_range(1,6,2)
print(next(g_range))
yield与return
相同点:返回值的个数都是无限制的
不同点:return只能返回一次值,yield能多次返回值