何时在Python中使用yield而不是return?
简而言之,无论何时程序控制到达return语句,程序执行都会终止,其余语句将不会执行。
然而,对于yield,无论何时程序控制到达yield语句,程序执行都会暂停,稍后我们可以继续函数中的其他语句。
让我们详细了解这两个语句。
Yield
在函数中使用yield语句会使该函数成为一个生成器函数,可用于循环中。当函数正在运行且yield语句执行时,yield之后的value将传递回调用它的循环。下次循环迭代时,函数将从yield语句之后立即开始。
def func(): yield 1 yield 2 yield 3 for num in func(): print(num * num)
输出
1 4 9
在上面的程序中,调用该函数的循环将在func函数完成时完成——要么到达函数的末尾(func()),要么到达return语句。
但是,任何使用相同生成器函数的新循环都将从头开始执行该函数。
Return
return语句:
用于停止函数的执行,并可选择向调用者返回值。具有return(但没有yield)的函数不能在循环中使用(与上面的yield不同)。
如果再次调用先前已执行的函数,则函数将从头开始执行(与上面的yield不同)。
何时使用return或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…finally块的try子句中使用yield语句,因为不能保证生成器会恢复,因此不能保证finally块会执行。
广告