在Python语法中如果用for-in循环,那么就要使用迭代器协议,只要对象支持__iter__和__next__双下划线方法,那么就能够使用for-in循环。
1 class RepeaterIterator: 2 def __init__(self, source): 3 self.source = source 4 5 def __next__(self): 6 return self.source.value 7 8 9 class Repeater: 10 def __init__(self, value): 11 self.value = value 12 13 def __iter__(self): 14 return RepeaterIterator(self) 15 16 17 repeater = Repeater('Hello') 18 for item in repeater: 19 print(item)
上面的代码会在控制台循环打印"hello".
上面的for-in那一段代码可以展开成下面的但是效果相同的代码:
1 repeater=Repeater('Hello') 2 iterator = repeater.__iter__() 3 while True: 4 item = iterator.__next__() 5 print(item)
从上面可以看出,for-in只是简单的while循环的语法糖。
- 首先让repeater对象准备迭代,即调用__iter__方法来返回实际的迭代器对象。
- 然后循环反复调用迭代器对象的__next__方法,从中获取值。