在Python中,可迭代对象(iterable)是一个对象,它可以返回一个迭代器(iterator)用于遍历其元素。迭代器是一个对象,它有一个 __next__() 方法(在Python 2中,它是 next() 方法,但作为一个方法而不是函数),该方法用于返回序列中的下一个元素。当没有更多元素时,__next__() 方法会抛出一个 StopIteration 异常。
下面是如何在Python中实现一个迭代器和可迭代对象的例子:
可迭代对象
首先,你需要定义一个类并实现 __iter__() 方法,该方法返回一个迭代器对象。
python
| class MyIterable: | |
| def __init__(self, start, end): | |
| self.start = start | |
| self.end = end | |
| def __iter__(self): | |
| return MyIterator(self.start, self.end) | 
迭代器
然后,你需要定义另一个类(通常作为可迭代对象的内部类),并实现 __iter__()(尽管这在这里是可选的,因为迭代器已经是迭代器了)和 __next__() 方法。
python
| class MyIterator: | |
| def __init__(self, start, end): | |
| self.current = start - 1 # 初始化时,current 在序列的开始之前 | |
| self.end = end | |
| def __iter__(self): | |
| # 迭代器本身就是迭代器,所以直接返回自己 | |
| return self | |
| def __next__(self): | |
| if self.current >= self.end: | |
| raise StopIteration | |
| self.current += 1 | |
| return self.current | 
使用示例
现在你可以使用你的可迭代对象和迭代器了:
python
| iterable = MyIterable(0, 5) | |
| iterator = iter(iterable) # 或者直接使用 iterable.__iter__() | |
| for i in iterator: | |
| print(i) # 输出: 0 1 2 3 4 | |
| # 或者使用 next() 函数 | |
| print(next(iterator)) # 抛出 StopIteration,因为没有更多元素了 | 
注意:在实际应用中,迭代器通常作为可迭代对象的内部实现细节,并且你不需要直接实例化迭代器。你只需要实现可迭代对象的 __iter__() 方法,并在其中返回适当的迭代器对象即可。然后,你可以使用 for 循环或 iter() 函数和 next() 函数来遍历可迭代对象。