python中yield关键字
yield 就是保存当前程序执行状态。
yield可以简单理解为return操作,但和return又有很大的区别。
执行完return,当前函数就终止了,函数内部的所有数据、内存空间,全部都没有了。
而yield在返回数据的同时,还保存了当前的执行内容,当你再一次调用这个函数时,他会找到你在此函数中的yield关键字,然后从yield的下一句开始执行。
用 yield 的函数,好处是不用一次计算所有元素,而是用一次算一次。
当有多个返回值时,用 return 全部一起返回了,需要单个逐一返回时可以用 yield。
带有yield的函数在Python中被称之为generator(生成器)
只要在def函数里面看到有 yield 关键字那么就是生成器
def generator():
for i in range(1, 5):
print('<----开始生成')
yield i
print('完成一次----->')
gen = generator()
print(next(gen)) # 函数第一次调用next(gen)函数时,generator函数从开始执行到yield,并返回yield的值。
print(next(gen)) # 在函数第二次调用next(gen)函数时,generator函数从上一次yield结束的地方继续运行(下一次循环),直至下一次执行到yield的地方,并返回yield的值
print(next(gen))
命令行执行 next指令如下:(注意上一次结束的地方和下一次开始的地方)
>>> print(next(gen))
<----开始生成
1
>>> print(next(gen))
完成一次----->
<----开始生成
2
>>> print(next(gen))
完成一次----->
<----开始生成
3
>>> print(next(gen))
完成一次----->
<----开始生成
4
>>> print(next(gen))
完成一次----->
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
print(next(gen))
StopIteration
print(next(gen))
生成器如果把数据生成完成,再次获取生成器中的下一个数据会抛出一个StopIteration 异常,表示停止迭代异常