【发布时间】:2012-12-20 11:10:03
【问题描述】:
我很好奇在生成器中使用raise StopIteration 和return 语句之间的区别。
例如,这两个功能有什么区别吗?
def my_generator0(n):
for i in range(n):
yield i
if i >= 5:
return
def my_generator1(n):
for i in range(n):
yield i
if i >= 5:
raise StopIteration
我猜测更“pythonic”的方式是第二种方式(如果我错了,请纠正我),但据我所知,两种方式都会引发StopIteration 异常。
【问题讨论】:
-
显式或隐式('off the end')
return是终止生成器的预期方式。如果 PEP 479 被接受,“raise StopIteration”版本最终将无法像现在这样工作。 -
请注意,PEP 479 "Change StopIteration handling inside generators" 在 2014 年 11 月被 Python 3.5 接受。
标签: python generator stopiteration