Python中的yield break
根据对这个问题的回答,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
这样做是有效的,但感觉有点奇怪。你有没有更好的想法?
4 个回答
当然可以!请看下面的内容:
在编程中,我们经常会遇到一些问题,尤其是当我们在使用某些工具或库的时候。有时候,文档可能写得不够清楚,或者我们对某些概念不太理解,这就需要我们去寻求帮助。
比如说,有人可能在使用某个编程语言时,遇到了错误信息,或者在运行代码时发现程序没有按预期工作。这时候,他们会把问题发到像StackOverflow这样的网站上,寻求其他程序员的建议和解决方案。
在提问时,描述问题的方式非常重要。清晰地说明你遇到的具体情况,比如你使用的是什么工具、遇到的错误信息是什么、你尝试过哪些解决方法等等,这样其他人才能更好地理解你的问题,并给出有效的帮助。
总之,编程过程中遇到问题是很正常的,重要的是要学会如何有效地寻求帮助,并从中学习和成长。
def generate_nothing():
return iter([])
处理这个问题的一个好方法是抛出 StopIteration 异常。这种情况发生在你的迭代器没有更多的内容可以提供时,当你调用 next()
时就会出现这个异常。这样做也能优雅地结束一个循环,而不会执行循环内部的任何代码。
举个例子,假设我有一个元组 (0, 1, 2, 3)
,我想得到重叠的对 ((0, 1), (1, 2), (2, 3))
。我可以这样做:
def pairs(numbers):
if len(numbers) < 2:
raise StopIteration
for i, number in enumerate(numbers[1:]):
yield numbers[i], number
现在 pairs
可以安全地处理只有一个数字或更少的列表。
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,当某个变量的值达到一定的标准时,我们就希望程序能做出反应。这种情况下,我们可以使用“条件语句”。
条件语句就像是一个判断的开关,只有当条件满足时,程序才会执行特定的代码。想象一下,你在家里有一个灯开关,只有当你按下开关时,灯才会亮。条件语句的工作原理就类似于这个开关。
在编程中,常见的条件语句有“如果(if)”和“否则(else)”。“如果”后面跟着一个条件,如果这个条件为真,程序就会执行“如果”后面的代码;如果条件不成立,程序就会执行“否则”后面的代码。
通过使用条件语句,我们可以让程序更加灵活,能够根据不同的情况做出不同的反应。这就像是给程序加上了智慧,让它能根据环境变化做出相应的决策。
def generate_nothing():
return
yield