MST
星途 面试题库

面试题:Python函数中return与yield的结合与差异

在Python中,写一个包含生成器的函数,该函数使用yield生成一系列数字。同时,在函数内某个条件满足时使用return提前结束函数。解释return和yield在这种场景下的工作原理,以及它们如何影响函数的执行和返回值。
28.9万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
def number_generator():
    num = 0
    while True:
        if num >= 5:
            return
        yield num
        num += 1


gen = number_generator()
for num in gen:
    print(num)

returnyield 的工作原理及影响

  1. yield
    • 当函数执行到yield语句时,函数会暂停执行,并返回yield后面的值。同时,函数的当前状态(包括局部变量的值、执行位置等)会被保存下来。
    • 下次调用生成器的__next__()方法(在for循环中隐式调用)时,函数会从暂停的位置继续执行,直到再次遇到yield或者return语句。
  2. return
    • 在生成器函数中,return语句用于提前结束生成器。当执行到return语句时,生成器会抛出StopIteration异常,标志着生成器迭代的结束。
    • 与普通函数不同,生成器函数中的return语句不能返回值(如果在Python 3.3及以上版本,return语句可以带一个返回值,这个返回值会成为StopIteration异常的参数)。在上述代码中,当num >= 5时,执行return语句,生成器停止生成值,for循环也会随之结束。