在Python中,迭代器協(xié)議要求實(shí)現(xiàn)兩個(gè)方法:__iter__()
和 __next__()
。為了避免死循環(huán),我們需要確保在每次調(diào)用 __next__()
方法時(shí),都能返回一個(gè)有效的元素,直到?jīng)]有更多元素可以返回為止。
以下是一個(gè)簡單的示例,展示了如何實(shí)現(xiàn)一個(gè)避免死循環(huán)的迭代器:
class MyIterator:
def __init__(self, start, end):
self.start = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if self.start >= self.end:
raise StopIteration
else:
self.start += 1
return self.start - 1
# 使用示例
iterator = MyIterator(0, 5)
for num in iterator:
print(num)
在這個(gè)例子中,MyIterator
類實(shí)現(xiàn)了迭代器協(xié)議。__iter__()
方法返回迭代器對(duì)象本身,而 __next__()
方法在每次調(diào)用時(shí)檢查當(dāng)前值是否在指定范圍內(nèi)。如果在范圍內(nèi),則返回當(dāng)前值并將迭代器向前移動(dòng)一個(gè)位置。當(dāng)?shù)鞯竭_(dá)范圍的末尾時(shí),__next__()
方法會(huì)引發(fā) StopIteration
異常,從而結(jié)束迭代。
這個(gè)實(shí)現(xiàn)可以避免死循環(huán),因?yàn)槊看握{(diào)用 __next__()
方法時(shí),我們都會(huì)檢查是否還有元素可以返回。如果沒有,我們會(huì)引發(fā) StopIteration
異常,而不是繼續(xù)執(zhí)行循環(huán)。