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