在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()?函數來遍歷可迭代對象。