Yield 暂停返回函数
yield 是 Python 中的一个关键字,用于定义生成器函数。生成器函数允许你在函数执行过程中暂停并返回一个值,而不是一次性返回所有值。每次调用生成器的 __next__() 方法时,函数会从上次暂停的地方继续执行,直到遇到下一个 yield 语句或函数结束。
以下是一个简单的例子,展示了如何使用 yield 关键字:
在这个例子中,simple_generator 是一个生成器函数,每次调用 next(gen) 时,它会返回下一个 yield 语句的值。
生成斐波那契数列:
工作原理¶
- 当生成器函数被调用时,返回一个生成器对象,函数体不会立即执行。
- 调用
next()或迭代生成器对象时,函数体开始执行,直到遇到yield,返回yield后的值并暂停。 - 再次调用
next()时,函数从暂停处继续执行,直到下一个yield或函数结束。 - 如果函数结束或遇到
return,生成器抛出StopIteration异常。
优点¶
- 惰性求值:按需生成值,节省内存。
- 无限序列:可以表示无限序列,如自然数。
- 状态保持:生成器函数在
yield后暂停,保留局部变量状态。
与 return 的区别¶
return会终止函数的执行并返回一个值。yield会暂停函数的执行并返回一个值,但函数状态会被保留,以便下次继续执行。
例如:
在 example_return 中,函数在第一次 return 后就结束了,而在 example_yield 中,函数会在每次 yield 后暂停,并在下一次调用时继续执行。