1.什么是生成器
- 生成的工具
- 生成器可以理解为一个”自定义“的迭代器。
2.如何实现生成器
# 但凡在函数内部使用yield,调用该函数时,函数体代码不会执行。
# 而是返回一个生成器。
def func1():
print(1)
yield 2
func1() # 此时未执行,无输出
res = func1()
print(res) # 输出为generator生成器对象。
res.__next__() # 输出为(1)
yield:
- 每次执行到yield都会往生成器对象中添加一个值。
- 只能在函数内部定义。
- yield可以保存函数的暂停状态。
return:
- 函数遇到return将直接结束并返回。
自定义迭代器:
def func():
print('准备下蛋')
print('1---1号蛋')
yield '1号蛋'
print('2---2号蛋')
yield '2号蛋'
print('3---3号蛋')
yield '3号蛋'
print('结束下蛋')
res = func() #
res.__next__()
res.__next__()
res.__next__()
上述例子可发现:每次调用__next__方法时,程序会执行到下一个yield位置并暂停,直到下一次调用。
def my_range(start, end, move=1): # 简单的range实现
while start < end:
yield start
start += move