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
01-02 01:10