是什么让Python中的东西可以迭代?即。可以使用for
我可以在Python中创建一个可迭代的类吗?如果是这样,怎么样?
答案 0 :(得分:55)
要使类可迭代,请编写一个返回迭代器的__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!
该示例使用列表迭代器,但您也可以通过使__iter__()
成为generator或返回定义next()
方法的迭代器类的实例来编写自己的迭代器。
答案 1 :(得分:8)
Python documentation完全描述了这一点:
需要为容器对象定义一个方法以提供迭代支持:
container.__iter__()
返回一个迭代器对象。该对象需要支持下面描述的迭代器协议。如果容器支持不同类型的迭代,则可以提供其他方法来专门请求这些迭代类型的迭代器。 (支持多种迭代形式的对象的示例是支持广度优先和深度优先遍历的树结构。)此方法对应于Python / C API中Python对象的类型结构的tp_iter槽。
迭代器对象本身需要支持以下两种方法,它们共同构成迭代器协议:
iterator.__iter__()
返回迭代器对象本身。这是允许容器和迭代器与for和in语句一起使用所必需的。此方法对应于Python / C API中Python对象的类型结构的tp_iter槽。
iterator.next()
从容器中返回下一个项目。如果没有其他项,请提高StopIteration异常。此方法对应于Python / C API中Python对象的类型结构的tp_iternext槽。
答案 2 :(得分:4)
任何具有__iter__()
方法的对象都被认为是可迭代的。
此外,任何序列(具有__getitem__()
方法的对象)都可以返回迭代器。迭代器是一个带有__next__()
方法的对象,它返回序列中的下一个对象并抛出StopIteration异常。
答案 3 :(得分:2)
这个question可以帮到你,它描述了如何制作一个迭代器
答案 4 :(得分:0)
您需要next()
和__iter__()
方法。 Here's a nice little tutorial