|
发表于 2023-1-7 15:27:30
|
显示全部楼层
本帖最后由 阿奇_o 于 2023-1-7 15:32 编辑
其实,for循环 会先调用 iter(mylist) 即 mylist.__iter__() ,这返回了一个你自定义的MyIterator实例对象(迭代器),然后为了遍历元素,则需要反复调用这个对象的 __next__()
甚至,你不用另外自定义的MyIterator,只要MyList里的__iter__() 返回的是一个合理的 迭代器或生成器 (能遍历元素),就可以,比如:
- class MyList2:
- def __init__(self):
- self.items = []
- def __iter__(self):
- print("__iter__ was called.")
- return (i for i in self.items) # 返回能遍历元素的生成器对象
- def add(self, val):
- self.items.append(val)
-
- ml2 = MyList2()
- ml2.add(1)
- ml2.add(2)
- for i in ml2:
- print(i)
-
- __iter__ was called.
- 1
- 2
复制代码
|
|