什么时候在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块将被执行。