根据这个问题的答案,在C#中
yield break
相当于Python中的return
。在正常情况下,return
确实会停止生成器。但是如果您的函数除了return
之外什么都不做,那么您将得到一个None
而不是空迭代器,而yield break
在C#中返回的就是空迭代器。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
它能用,但感觉很奇怪。你有更好的想法吗?
return
。Python 不同于 C#,不要期望它们的工作方式一样。 - Chris Lutzyield
的函数不是生成器函数。因此,你的第一个例子只会返回None
,并尝试对其进行迭代。 - Jasmijn