首页
学习
活动
专区
工具
TVP
发布

Generator(二)

有几天没更了,因为有事不在学校。今天接着上一篇文章继续。上一篇文章介绍了迭代器和生成器,重点在于:生成器自带buff——iter() 、next(),能够很自然的调用这些方法。接下来看看更加精彩的操作。

Method of Operation

正如我们在上一篇文章的介绍中详细阐述的那样,生成器提供了一种生成迭代器的便捷方法,这就是为什么它们被称为生成器的原因。

Method of working:

一个生成器被称为一个函数,它的返回值是一个迭代器,比如一个生成器对象。生成器的代码在这个阶段不会被执行。

迭代器可以通过调用next()方法来使用。第一次执行像一个函数,比如迭代器内的第一行代码,该代码将被执行,直到达到yield语句为止。

yield返回表达式的值,它跟随关键字yield。这就像一个函数,但是Python会跟踪这个yield的位置,并且为下一次调用存储局部变量的状态。

如果生成器主体完全工作,或者如果程序流遇到没有值的返回语句,迭代器工作完成。

我们将在下面的例子中说明这种行为,其中我们定义了一个生成器,它能够迭代所有斐波纳契数字。

Using a ‘return’ in a Generator

自Python 3.3以来,生成器也可以使用返回语句,但生成器仍然至少需要一个yield语句才能成为生成器!生成器内部的return语句相当于引发StopIteration()

让我们来看看引发StopIteration的生成器:

对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令.

send Method

生成器不仅可以发送对象,还可以接收对象。通过将发送方法应用于发生器对象,可以将消息(即对象)发送到发生器中。

我们必须首先调用生成器,因为生成器需要启动。发送到尚未启动的生成器会导致异常:

throw Method

用来向生成器函数送入一个异常,可以结束系统定义的异常,或者自定义的异常。throw()后直接跑出异常并结束程序,或者消耗掉一个yield,或者在没有下一个yield的时候直接进行到程序的结尾。

输出:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180610G1KN5M00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券