python如何自定义迭代器


这篇文章主要介绍了python如何自定义迭代器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。对于新的和经验丰富的 Python 开发者来说,自定义迭代器是一个非常强大的但令人迷惑的主题。许多内置类型,例如列表、集合和字典,已经实现了允许它们在底层迭代的协议。这使我们可以轻松地遍历它们。我们如何迭代我们自己的自定义类?首先,让我们来澄清一些术语。要成为一个可迭代对象,一个类需要实现__iter__()__iter__()方法需要返回一个迭代器要成为一个迭代器,一个类需要实现__next__()(或在 Python 2中是next()),当没有更多的项要迭代时,必须抛出一个StopIteration异常。呼!这听起来很复杂,但是一旦你记住了这些基本概念,你就可以在任何时候进行迭代。我们什么时候想使用自定义迭代器?让我们想象一个场景,我们有一个Server实例在不同的端口上运行不同的服务,如httpssh。其中一些服务处于active状态,而其他服务则处于inactive状态。当我们遍历Server实例时,我们只想遍历那些处于active的服务。让我们创建一个IterableServer类:首先,我们将当前位置初始化为0。然后,我们定义一个__next__()方法来返回下一项。我们还将确保在没有更多项返回时抛出StopIteration。到目前为止都很好!现在,让我们实现这个__next__()方法。我们对列表中的服务进行遍历,而当前的位置小于服务的个数,但只有在服务处于活动状态时才返回。一旦我们遍历完服务,就会抛出一个StopIteration异常。因为我们实现了__next__()方法,当它耗尽时,它会抛出StopIteration。我们可以从__iter__()返回self,因为IterableServer类遵循iterable协议。现在我们可以遍历一个IterableServer实例,这将允许我们查看每个处于活动的服务,免费云主机域名如下所示:太棒了,但我们可以做得更好!在这样类似的实例中,我们的迭代器不需要维护大量的状态,我们可以简化代码并使用 generator(生成器) 来代替。yield关键字到底是什么?在定义生成器函数时使用 yield。这有点像return,虽然return在返回值后退出函数,但yield会暂停执行直到下次调用它。这允许你的生成器的功能在它恢复之前保持状态。查看 yield 的文档以了解更多信息。使用生成器,我们不必通过记住我们的位置来手动维护状态。生成器只知道两件事:它现在需要做什么以及计算下一个项目需要做什么。一旦我们到达执行点,即yield不再被调用,我们就知道停止迭代。这是因为一些内置的 Python 魔法。在 Python 关于__iter__()的文档中我们可以看到,如果__iter__()是作为一个生成器实现的,它将自动返回一个迭代器对象,该对象提供__iter__()__next__()方法。阅读这篇很棒的文章,深入了解迭代器,可迭代对象和生成器。感谢你能够认真阅读完这篇文章,希望小编分享的“python如何自定义迭代器”这篇文章对大家有帮助,同时也希望大家多多支持百云主机,关注百云主机行业资讯频道,更多相关知识等着你来学习!

相关推荐: Spring Boot配置文件实例分析

今天小编给大家分享一下Spring Boot配置文件实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 Spring Boot使用了一个全局…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 08/15 17:03
下一篇 08/15 17:04

相关推荐