构建一个基本的Python Iterator

构建一个基本的Python Iterator

如何在python中创建迭代函数(或迭代器对象)?



红糖糍粑
浏览 613回答 3
3回答

小唯快跑啊

python中的Iterator对象符合迭代器协议,这基本上意味着它们提供了两种方法:__iter__()和next()..这个__iter__返回迭代器对象,并在循环开始时隐式调用。这个next()方法返回下一个值,并在每个循环增量处隐式调用。next()在没有更多值可返回时引发StopIteration异常,循环构造将隐式捕获该异常以停止迭代。下面是一个简单的计数器示例:class&nbsp;Counter: &nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__init__(self,&nbsp;low,&nbsp;high): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.current&nbsp;=&nbsp;low &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.high&nbsp;=&nbsp;high&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__iter__(self): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;self&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;next(self):&nbsp;#&nbsp;Python&nbsp;3:&nbsp;def&nbsp;__next__(self) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;self.current&nbsp;>&nbsp;self.high: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;raise&nbsp;StopIteration &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.current&nbsp;+=&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;self.current&nbsp;-&nbsp;1for&nbsp;c&nbsp;in&nbsp;Counter(3,&nbsp;8): &nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;c这将打印:3 4 5 6 7 8正如前面的答案所述,使用生成器编写这一内容更容易:def&nbsp;counter(low,&nbsp;high): &nbsp;&nbsp;&nbsp;&nbsp;current&nbsp;=&nbsp;low&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;current&nbsp;<=&nbsp;high: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yield&nbsp;current &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current&nbsp;+=&nbsp;1for&nbsp;c&nbsp;in&nbsp;counter(3,&nbsp;8): &nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;c印刷输出将是相同的。在引擎盖下,生成器对象支持迭代器协议,并执行类似于类计数器的操作。大卫·默茨的文章迭代器和简单生成器是个很好的介绍。

哈士奇WWW

首先迭代工具模块对于迭代器可能有用的各种情况,都是非常有用的,但下面是在python中创建迭代器所需的全部内容:产量这不是很酷吗?产量可以用来代替正常值回归在一个函数中。它同样返回对象,但它不是销毁状态和退出,而是保存状态,以便在您想要执行下一次迭代时使用。下面是直接从迭代工具函数列表:def&nbsp;count(n=0): &nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;True: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yield&nbsp;n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;+=&nbsp;1如函数描述中所述(这是计数()),它生成一个迭代器,返回从n开始的连续整数。生成器表达式是另一罐蠕虫(可怕的虫子!)它们可以代替列表理解为了节省内存(列表理解在内存中创建一个列表,如果不分配给变量,则在使用后销毁,但是生成器表达式可以创建生成器对象.这是一种别出心裁的说法。下面是生成器表达式定义的示例:gen&nbsp;=&nbsp;(n&nbsp;for&nbsp;n&nbsp;in&nbsp;xrange(0,11))这与上面迭代器的定义非常相似,除非整个范围预定在0到10之间。我刚找到xrange()(得知我以前没见过.)并将其添加到上面的示例中。xrange()的可迭代版本。范围()它的优点是没有预先建立列表。如果您有一个庞大的数据集来迭代,并且只有这么多的内存可以执行,这将是非常有用的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python