我有一个生成器,并且不想让其产生任何东西,之后我要停止生成器的迭代,即StopIteration
,但是我不确定该采用哪种方式。
我想到以下选项:
yield None
return
和
return
在我的生成器中。 它们相等吗?还是我应该使用哪一个?
答案 0 :(得分:2)
它们等效吗?
不。第二个甚至不是生成器(没有yield表达式)
我应该使用哪个?
第一个很好。 return语句以及显式产生的值None
都是多余的,可以删除(但它们也不会损害任何内容)。
def myfunc():
print("doing stuff before yielding the first (and only) value")
yield
print("doing more stuff before raising StopIteration")
如果您使用显式的return语句,则返回的值将出现在StopIteration
异常实例(实际上是value
属性)上。
从语法上讲,您可以 将代码放在return
语句之后,但是它将无法访问。因此,没有必要这样做。
答案 1 :(得分:0)
使用return
从生成器返回不会像函数那样返回值“ None”。相反,它只是停止生成器。
>>> def f():
... yield 1
... yield 2
... yield None
... return
...
>>> def f2():
... yield 1
... yield 2
... return
...
>>> for i in f():
... print(i)
...
1
2
None
>>> for i in f2():
... print(i)
...
1
2
>>>