Python 带返回语句的生成器

Python 带返回语句的生成器,python,generator,Python,Generator,在我的报道中,我对下面的案例(Python3.4)摸不着头脑 在生成器中使用return时,未“达到”返回,而在中使用str_的收益率,我得到了预期结果 这个问题似乎很简单,但我相信在生成器中使用return是可以实现的。函数体中出现的yield将其转换为生成器函数,而不是正常函数。在生成器函数中,使用return是一种表示“生成器已结束,没有更多元素”的方式。通过将生成器方法的第一条语句设置为return stru in,可以保证生成器不返回任何元素 如注释所述,返回值用作StopIterat

在我的报道中,我对下面的案例(Python3.4)摸不着头脑

在生成器中使用return时,未“达到”返回,而在中使用str_的
收益率,我得到了预期结果


这个问题似乎很简单,但我相信在生成器中使用return是可以实现的。

函数体中出现的
yield
将其转换为生成器函数,而不是正常函数。在生成器函数中,使用
return
是一种表示“生成器已结束,没有更多元素”的方式。通过将生成器方法的第一条语句设置为
return stru in
,可以保证生成器不返回任何元素

如注释所述,返回值用作
StopIteration
异常的参数,该异常在生成器结束时引发。见:

>>> gen = simple_gen_function("hello", "foo")
>>> next(gen)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration: hello

函数体中出现的
yield
将其转换为生成函数,而不是正常函数。在生成器函数中,使用
return
是一种表示“生成器已结束,没有更多元素”的方式。通过将生成器方法的第一条语句设置为
return stru in
,可以保证生成器不返回任何元素

如注释所述,返回值用作
StopIteration
异常的参数,该异常在生成器结束时引发。见:

>>> gen = simple_gen_function("hello", "foo")
>>> next(gen)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration: hello

return
在生成器中的行为与正常函数不同,它是在生成器完成时引发的
StopIteration
中的值,具有
yield
的函数不能只返回一个值,相反,您需要生成器作为辅助函数,另一个生成器要么返回未更改的字符串,要么返回生成器对象。是什么让您认为它没有到达?如果从未到达yield,为什么要使用“函数”仍然充当发电机吗?@AliSAIDOMAR在函数中的任何位置出现
yield
,都会将整个函数变成发电机。无论是否从未达到收益率。
return
在生成器中的行为与普通函数不同,它是在生成器完成时提升的
StopIteration
中的值,具有
yield
的函数不能只返回一个值,相反,您需要生成器作为辅助函数,另一个生成器要么返回未更改的字符串,要么返回生成器对象。是什么让您认为它没有到达?如果从未到达yield,为什么要使用“函数”仍然充当发电机吗?@AliSAIDOMAR在函数中的任何位置出现
yield
,都会将整个函数变成发电机。不管收益率是否从未达到。谢谢,我相信这是“收益率”语句的“到达”将函数转换为生成器。谢谢,我相信这是“收益率”语句的“到达”将函数转换为生成器。
>>> def foo():
...     if False:
...         yield "bar"
...     return "baz"
>>> foo()
<generator object foo at ...>
>>> # The return value "baz" is only exposed via StopIteration
>>> # You probably shouldn't use this behavior.
>>> next(foo())
Traceback (most recent call last):
  ...
StopIteration: baz
>>> # Nothing is ever yielded from the generator, so it generates no values.
>>> list(foo())
[]