什么时候在Python中使用yield而不是return?
简而言之,只要控制权到达程序中的return语句,程序的执行就会终止,其余的语句将不会执行。
但是,在产生收益的情况下,只要控制权到达程序中的yield语句,程序的执行就会暂停,稍后我们可以继续执行函数中的其他语句。
让我们详细了解这两个语句。
产量
在函数中使用yield语句会使函数成为可以在循环中使用的生成器函数。当函数运行且yield语句执行时,yield之后的值将传递回调用它的循环。下一次循环迭代时,该函数在yield语句之后立即启动。
def func(): yield 1 yield 2 yield 3 for num in func(): print(num * num)
输出
1 4 9
在上面的程序中,调用函数的循环将在func函数完成时完成–遇到函数的结尾(func())或return语句。
但是,任何使用相同生成器函数的新循环都将从头开始执行该函数。
返回
返回声明
用于停止函数执行并有选择地将值返回给调用方。具有返回值(但没有yield)的函数不能在循环中使用(与上面的yield不同)。
如果再次调用先前执行的函数,则该函数从头开始执行(与上面的yield不同)。
什么时候使用收益或收益?
但是,由于资源限制或根本不想将整个序列存储在内存中,建议在我们要遍历序列的情况下使用yield。对于其他情况,我们可以考虑使用return语句。
让我们看看另一个使用yield语句生成整数平方的程序。
def Square(): i = 1; # An Infinite loop to generate squares while True: yield i*i i += 1 # Next execution resumes from this point for num in Square(): if num > 100: break print(num)
输出
1 4 9 16 25 36 49 64 81 100
在try…的try子句中通常不使用yield语句。因为无法保证将永远恢复生成器,所以不能保证finally块将被执行。