我很好奇使用之间的区别raise StopIteration
and a 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
例外。
无需明确提出StopIteration
因为这就是一个裸露的return
语句适用于生成器函数 - 所以是的,它们是相同的。但不,只是使用return
更Pythonic。
From: http://docs.python.org/2/reference/simple_stmts.html#the-return-statement http://docs.python.org/2/reference/simple_stmts.html#the-return-statement(对Python 3.2有效)
在生成器函数中,return 语句不允许包含 expression_list。在这种情况下,裸露的返回表明生成器已完成并将导致 StopIteration 被引发。
或者正如 @Bakuriu 指出的 - Python 3.3 的生成器语义略有变化,因此以下内容更合适:
在生成器函数中,return 语句指示生成器已完成并将导致引发 StopIteration。返回值(如果有)用作构造 StopIteration 的参数,并成为 StopIteration.value 属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)