什么使得在Python中迭代的东西
是什么让Python在Python中迭代? 即。 可以循环使用for
我有可能在Python中创build一个可迭代的类吗? 如果是这样,怎么样?
为了让一个类可迭代,写一个返回一个迭代器的__iter__()
方法。 例
class MyList(object): def __init__(self): self.list = [42, 3.1415, "Hello World!"] def __iter__(self): return iter(self.list) m = MyList() for x in m: print x
版画
42 3.1415 Hello World!
这个例子使用了一个列表迭代器,但是你也可以编写自己的迭代器,方法是创build__iter__()
生成器或者返回定义next()
方法的迭代器类的实例。
Python文档正是这样描述的:
需要为容器对象定义一个方法来提供迭代支持:
container.__iter__()
返回一个迭代器对象。 该对象需要支持下面描述的迭代器协议。 如果一个容器支持不同types的迭代,可以提供额外的方法来专门为这些迭代types请求迭代器。 (支持多种forms的迭代的对象的一个例子将是支持广度优先和深度优先遍历的树形结构。)该方法对应于Python / C API中用于Python对象的types结构的tp_iter槽。
迭代器对象本身需要支持以下两种方法,它们一起构成迭代器协议:
iterator.__iter__()
返回迭代器对象本身。 这是允许容器和迭代器与for和in语句一起使用所必需的。 此方法对应于Python / C API中Python对象的types结构的tp_iter槽。
iterator.next()
返回容器中的下一个项目。 如果没有其他项目,则引发StopIterationexception。 此方法对应于Python / C API中Python对象的types结构的tp_iternext插槽。
带有__iter__()
方法的任何对象都被认为是可迭代的。
另外,任何序列(具有__getitem__()
方法的对象)都可以返回一个迭代器。 迭代器是带有__next__()
方法的对象,该方法返回序列中的下一个对象并引发StopIterationexception。
这个问题可以帮助你,它描述了如何做一个interator
你需要next()
和__iter__()
方法。 这是一个很好的小教程 。