美文网首页大数据 爬虫Python AI Sql互联网科技程序员
Python如何自定义迭代器和可迭代对象

Python如何自定义迭代器和可迭代对象

作者: 四明羽客 | 来源:发表于2017-11-30 17:09 被阅读230次

什么是迭代器和可迭代对象

迭代器:凡是实现了__iter__()__next__()(python2.x是next())方法的对象就是迭代器

可迭代对象:凡是能返回迭代器对象的对象就是可迭代对象
内建函数iter()会调用__iter__()来获取迭代器对象,所以可迭代对象必须实现__iter__()

自定义迭代器

class OddIterator(object):
    """Iterator to return all
        odd numbers"""

    def __init__(self, max):
        self.max = max
        self.num = 1

    def __iter__(self):
        return self

    def __next__(self):    # python 2.x 改成 next(self)
        if self.num <= self.max:
            num = self.num
            self.num += 2
            return num
        else:
            raise StopIteration

测试

>>> i = OddIterator(5)
>>> next(i)
1
>>> next(i)
3
>>> next(i)
5

迭代器可以直接调用next()方法

自定义可迭代对象

class OddNumber(object):
    def __init__(self, max):
        self.max = max

    def __iter__(self):
        return InfIter(self.max)

测试

>>> i = OddNumber(5)
>>> next(i)
Traceback (most recent call last):
  File "test.py", line 53, in <module>
    print next(i)
TypeError: instance has no next() method

因为OddNumber是可迭代对象,而不是一个迭代器,所以无法直接调用next()方法,必须先调用内建函数iter()获取迭代器

>>> o = OddNumber(5)
>>> i = iter(o)
>>> next(i)
1
>>> next(i)
3
>>> next(i)
5

相关文章

  • python 三大神器

    迭代器1.1、判断可迭代对象1.2、自定义迭代器自定义迭代器对象: 在类里面提供iter和next方法创建的对象就...

  • Python中的可迭代对象和迭代器对象

    Python中的可迭代对象和迭代器对象是两种不同的东西,可迭代对象是Iterable,迭代器对象是Iterator...

  • Python基础-16生成器-迭代器

    16.生成器-迭代器     可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象,在Python中提供...

  • 生成器与迭代器

    一:可迭代对象(Iterable) 1、什么叫可迭代对象? 2、python中那些是可迭代对象 二:迭代器(Ite...

  • [笔记]可迭代对象、迭代器、生成器

    为了更深入一点理解可迭代对象和迭代器,读了几篇不错的文章: Python实践18-可迭代对象和迭代器 - 曾月天的...

  • Python中的迭代器和生成器

    今天我们来学习下Python中的迭代器和生成器。 迭代和可迭代对象 在学习迭代器之前,我们需要了解下迭代和可迭代对...

  • Python12--迭代器

    1.迭代器 要理解迭代器,首先需要明白迭代器和可迭代对象的区别。一个一个读取、操作对象称为迭代,Python 中,...

  • 对象迭代与反迭代案例进阶

    案例课纲如下 如何实现可迭代对象和迭代器对象 如何使用生成器函数实现可迭代对象 如何进行反向迭代以及如何实现反向迭...

  • Python进阶——什么是迭代器?

    Python进阶——什么是迭代器? 在 Python 开发中,我们经常听到有关「容器」、「迭代器」、「可迭代对象」...

  • Python 入门之 Python三大器 之 迭代器

    Python 入门之 Python三大器 之 迭代器 1、迭代器 (1)可迭代对象: <1> 只要具有__ ite...

网友评论

    本文标题:Python如何自定义迭代器和可迭代对象

    本文链接:https://www.haomeiwen.com/subject/qeavbxtx.html