是的,它仍然是发电机。该
return是(几乎),相当于提高
StopIteration。
PEP 255清楚地说明了这一点:
规格:返回
生成器函数还可以包含以下形式的return语句:
"return"请注意,在生成器主体中的return语句上不允许使用expression_list(当然,它们可能会出现在嵌套在生成器中的非生成器函数的主体中)。
当遇到return语句时,控制将像在任何函数return中一样继续进行,并执行适当的finally子句(如果存在)。然后引发StopIteration异常,表示迭代器已耗尽。如果控制从生成器的末端流出而没有显式返回,则还会引发StopIteration异常。
请注意,对于生成器函数和非生成器函数,return的意思是“我完成了,没有有趣的返回值”。
请注意,return并不总是等同于提高StopIteration:不同之处在于如何处理try / except构造。例如,
>>> def f1():... try:... return... except:... yield 1>>> print list(f1())[]因为像在任何函数中一样,return只是退出,但是
>>> def f2():... try:... raise StopIteration... except:... yield 42>>> print list(f2())[42]因为StopIteration和任何异常一样都被一个裸露的“ except”捕获。



