yield关键字

在def函数中具有yield关键字。

def mygenerator(n):
	for i in range(n):
		print('开始生成...')
		yield i
		print('完成一次...')

注意:

  1. 代码执行到yield会暂停,把结果返回,下次启动会在暂停位置继续往下执行
  2. 如果把数据生成完了,再次获取生成器的下一个数据会抛出一个StopIteration异常,表示停止迭代异常
  3. while循环内部没有处理该异常的操作,需要手动处理异常
  4. for循环内部自动处理了该异常,推荐使用for循环。

示例

def generator(num):
    for i in range(num):
        print('开始')
        yield i
        print('生成完成')

g = generator(5)
# print(next(g))
# print(next(g))
# print(next(g))
# print(next(g))
# print(next(g))
# print(next(g)) # 会抛出异常

for i in g: # 抛出的异常被for自动处理
    print(i)