【发布时间】:2011-09-17 17:07:09
【问题描述】:
根据对这个question的回答,C#中的yield break相当于Python中的return。在正常情况下,return 确实会停止生成器。但是如果你的函数只做return,你会得到一个None而不是一个空的迭代器,它在C#中由yield break返回
def generate_nothing():
return
for i in generate_nothing():
print i
你会得到一个TypeError: 'NoneType' object is not iterable,
但是如果我在return 之前添加并且从不运行yield,这个函数会返回我所期望的。
def generate_nothing():
if False: yield None
return
它有效,但看起来很奇怪。你有更好的主意吗?
【问题讨论】:
-
这就是 Python 的工作原理。我不认为你真的需要最后的
return。 Python 不是 C#。不要指望它们的工作方式相同。 -
没有
yield的函数不是生成器。因此,您的第一个示例仅返回None并尝试对其进行迭代。 -
@Jochen:那不是生成器。它是一个可迭代的生成对象。虽然正如我在 phihag 的回答中所说,这不太重要。