__iter__方法,__next__方法
1.代码实现
# 定义一个类
# 怎么样才能成为可迭代对象?
# __iter__方法需要返回什么东西?
class MyList:
def __init__(self):
self.items = list()
def add(self, item):
self.items.append(item)
# 要想成为可迭代对象类,必须具备__iter__方法
def __iter__(self):
# 省略
# 需要在iter方法内返回个什么东西
# iter方法到底需要返回一个什么东西
# 这个对象是个什么 --> 迭代器
return MyIterator(self.items)
class MyIterator:
def __init__(self, obj):
self.mes = obj
self.current_num = 0
def __iter__(self):
pass
def __next__(self):
# 索引越界
if self.current_num < len(self.mes):
result = self.mes[self.current_num]
self.current_num += 1
return result
else:
raise StopIteration
# a = MyIterator()
# 通过类生成实例对象
m = MyList()
m.add(1)
m.add(2)
m.add(3)
m.add(4)
# m对象具备使用for循环的方法吗?
# iter next
for i in m:
print(i)
2.迭代协议
迭代协议 1.在任何可迭代对象传入到for循环或者其他循环工具中进行遍历时,迭代工具都是先通过iter()函数获得与可迭代对象对应的迭代器。 2.然后在对迭代器调用next函数,不断的依次获取元素 3.并在捕获到StopIteration异常时确定完成迭代,这就是完整的迭代过程,称之为"迭代协议"