在Python中,迭代器協議與其他協議(如序列協議、映射協議等)協同工作的關鍵在于定義一個實現了這些協議的類。迭代器協議要求類實現兩個方法:__iter__()
和 __next__()
。__iter__()
方法返回迭代器對象本身,而 __next__()
方法返回容器的下一個值。當容器中沒有更多元素時,__next__()
方法應引發 StopIteration
異常。
下面是一個簡單的示例,展示了如何將迭代器協議與其他協議協同工作:
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
else:
self.start += 1
return self.start - 1
# 使用 MyRange 類
for i in MyRange(0, 5):
print(i)
在這個例子中,我們定義了一個名為 MyRange
的類,它實現了迭代器協議。MyRange
類還實現了序列協議,因為它支持索引和切片操作。這使得我們可以將 MyRange
對象用作序列的替代品。
# 使用 MyRange 類作為序列
print(MyRange(0, 5)[2]) # 輸出 2
print(list(MyRange(0, 5))[1:4]) # 輸出 [1, 2, 3]
總之,要讓Python中的迭代器協議與其他協議協同工作,只需定義一個實現了這些協議的類,并確保它遵循相應協議的規范。這樣,你就可以將該類的對象用于需要這些協議的任何地方。