收益然后返回还是仅仅返回?

时间:2019-04-17 22:51:44

标签: python

我有一个生成器,并且不想让其产生任何东西,之后我要停止生成器的迭代,即StopIteration,但是我不确定该采用哪种方式。

我想到以下选项:

yield None
return

return

在我的生成器中。 它们相等吗?还是我应该使用哪一个?

2 个答案:

答案 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
>>>