【发布时间】:2016-10-06 06:37:35
【问题描述】:
在我的报道中,我对以下案例(python 3.4)摸不着头脑
def simple_gen_function(str_in, sep=""):
if sep == "":
yield str_in[0]
for c in str_in[1:]:
yield c
else:
return str_in
# yield from str_in
str_in = "je teste "
t = "".join(simple_gen_function(str_in))
p = "".join(simple_gen_function(str_in, "\n"))
print("%r %r" % (t, p))
# 'je teste' ''
在生成器中使用 return 时,使用 yield from str_in 时没有“达到”返回值我得到了预期的结果。
这个问题看起来很简单,但我相信在生成器中使用 return 就可以了。
【问题讨论】:
-
return在生成器中的行为与普通函数不同,它是在生成器完成时引发的StopIteration中的值,yield的函数不能只返回一个value 相反,您将需要生成器作为辅助函数,另一个返回未更改的字符串或返回生成器对象。 -
是什么让你认为它没有达到?
-
在没有达到yield的情况下,为什么“函数”仍然充当生成器?
-
@AliSAIDOMAR
yield在函数中的任何位置的存在都会将 整个 的东西一直变成一个生成器。永远达不到收益也没关系。