当前位置: 首页 > 面试题库 >

生成器中的raise StopIteration和return语句有什么区别?

太叔马鲁
2023-03-14
问题内容

我很好奇发生器中使用raise StopIterationreturn语句之间的区别。

例如,这两个功能之间有什么区别吗?

def my_generator0(n):
    for i in range(n):
        yield i
        if i >= 5:
            return

def my_generator1(n):
    for i in range(n):
        yield i
        if i >= 5:
            raise StopIteration

我猜想第二种方法是更“ pythonic”的方法(如果我错了,请纠正我),但据我所知,这两种方法都会引发StopIteration异常。


问题答案:

无需显式引发,StopIteration因为这就是return生成器函数的裸露语句-
因此,它们是相同的。但是不,仅使用returnPython即可。

来自:http : //docs.python.org/2/reference/simple_stmts.html#the-return-
statement
(对Python 3.2有效)

在生成器函数中,return语句不允许包含expression_list。在这种情况下,简单的返回指示生成器已完成,并将导致StopIteration升高。

或就像@Bakuriu指出的那样-生成器的语义对于Python 3.3略有变化,因此以下更合适:

在生成器函数中,return语句指示生成器已完成,并将引起StopIteration升高。返回的值(如果有)用作构造StopIteration的参数,并成为StopIteration.value属性。



 类似资料:
  • 问题内容: python中的return和break有什么区别?请解释它们在循环和函数中的确切作用?谢谢 问题答案: 用来过早地结束循环,而y是用于将返回值传递回函数调用者的关键字。如果使用时不带参数,则仅终止函数并返回到之前执行代码的位置。 在某些情况下,它们可以实现相同的目的,但以下两个示例可让您大致了解它们的用途 使用 遍历值列表并在我们看到数字时中断。 将产生以下输出 使用 这是函数在根据

  • 问题内容: 我知道什么是循环(对键进行迭代),但是第一次听说(对值进行迭代)。 我对循环感到困惑。我没有形容词。这是下面的代码: 我得到的是,遍历属性值。那么,为什么它不记录(返回)而不是?但是循环遍历每个键()。在这里,循环还会遍历键。但是不会迭代财产的价值,即。为什么会这样呢? 总而言之: 在这里,我控制台循环。它应该记录,但是在这里记录。为什么呢 问题答案: 遍历对象的可枚举属性名称。 (E

  • 问题内容: 是的,我已经搜索了这个问题,甚至提到了我的教科书(Don Gosselin的PHP),但是我似乎无法理解这个解释。 据我了解: echo =显示函数的最终结果 return =从函数返回值 我申请都和在下列功能我看不到的差或使用的“有效性” 代替。 两者都显示结果!我不明白什么? 问题答案: 我将对此给出一个完全非技术性的答案。 假设有一个叫Sally Function的女孩。您想知道

  • 问题内容: 如何做一个声明,从不同的语句? 如果我有退出的,如果条件,其中一个我应该喜欢,还是? 问题答案: 当您要退出循环时使用,而用于返回到调用它的步骤或停止进一步执行。

  • 问题内容: 什么是语句的简单基本解释是什么,如何在中使用它? 它和语句之间有什么区别? 问题答案: 该函数在控制台中写入一个字符串,即“打印”。该语句使您的函数退出并将值返回给其调用者。通常,功能的要点是接受输入并返回某些内容。当函数准备向其调用者返回值时使用该语句。 例如,这是一个同时使用和的函数: 现在,您可以运行调用的代码,如下所示: 如果将其作为脚本(例如.py文件)而不是在Python解

  • 与...的循环中,该循环迭代每个键()并迭代键,用于...的值不迭代属性的值,即。为什么是那样? 在这里,我为...控制台循环的。它应该记录但它记录。为什么? 示例链接