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 异常,表示停止迭代异常
标签:一次,函数,python,yield,next,关键字,print,gen From: https://www.cnblogs.com/sangern/p/17433584.html