Python的迭代器協(xié)議通過定義一個(gè)標(biāo)準(zhǔn)的方法集合,使得不同的對(duì)象可以以統(tǒng)一的方式被迭代。這個(gè)協(xié)議主要包含兩個(gè)方法:__iter__()
和 __next__()
。__iter__()
方法返回迭代器對(duì)象本身,而 __next__()
方法返回容器的下一個(gè)值。當(dāng)容器中沒有更多元素時(shí),__next__()
應(yīng)該拋出 StopIteration
異常。
迭代器協(xié)議提高代碼復(fù)用性的方式主要體現(xiàn)在以下幾個(gè)方面:
for
循環(huán)。這意味著你可以編寫一段通用的代碼來處理任何實(shí)現(xiàn)了迭代器協(xié)議的迭代對(duì)象,而不需要關(guān)心對(duì)象的具體類型。下面是一個(gè)簡單的示例,展示了如何使用迭代器協(xié)議來提高代碼復(fù)用性:
class MyRange:
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
current = self.start
self.start += 1
return current
# 使用自定義的 MyRange 類作為迭代器
for i in MyRange(0, 5):
print(i)
# 輸出:
# 0
# 1
# 2
# 3
# 4
在這個(gè)示例中,MyRange
類實(shí)現(xiàn)了迭代器協(xié)議,因此可以被用于 for
循環(huán)中。這段代碼可以很容易地復(fù)用于其他需要生成一系列數(shù)字的場(chǎng)景。