yield关键字
在def函数中具有yield关键字。
def mygenerator(n):
for i in range(n):
print('开始生成...')
yield i
print('完成一次...')
注意:
- 代码执行到yield会暂停,把结果返回,下次启动会在暂停位置继续往下执行
- 如果把数据生成完了,再次获取生成器的下一个数据会抛出一个StopIteration异常,表示停止迭代异常
- while循环内部没有处理该异常的操作,需要手动处理异常
- 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)