概念
- 迭代:是访问集合的一种方式
- 迭代器:是一个可以记住遍历位置的对象 (Iterator)
- 可迭代对象 :能够迭代的对象 (列表,字典,元组,字符串,集合)(Iterable)
具有__iter__方法的对象是可迭代对象
from collections.abc import Iterable #引入Iterable模块(判断对象是否为可迭代对象)
class Mylist(object):
"""可迭代对象类"""
def __init__(self):
"""实例对象属性的初始化和赋值"""
self.list=[]
def add(self,item):
"""实例方法"""
self.list.append(item)
def __iter__(self):
""" 具有这个方法的才是迭代器"""
return self
if __name__ =="__main__":
alist=Mylist()
alist.add(1)
alist.add(2)
alist.add(3)
alist.add(4)
alist.add(5)
print(alist) #[1, 2, 3, 4, 6]
print(isinstance(alist,Iterable)) #True
具有__iter__方法和__next__方法的对象是迭代器
class Iterator(object):
"""迭代器类"""
def __init__(self,mylist):
self.mylist=mylist #迭代器需要传入一个可迭代对象,这里用列表
self.current =0 #迭代器需要记录是否遍历完整个列表
def __iter__(self):
"""iter方法也是一个迭代器,所以要返回自身"""
return self
def __next__(self):
"""获取下一个迭代器元素"""
if self.current<len(self.mylist): #判断此时获取的元素下标是否存在
item =self.mylist[self.current] #存在 取得此时对应的元素
self.current+=1 # 并获取下一个元素的下标
else:
raise StopIteration #当此时的下标不存在时,说明迭代对象遍历完成,抛出迭代异常
return item
if __name__ == '__main__':
alist=[1,2,3,4,5,6]
iterator =Iterator(alist)
for i in iterator:
print(i,end=" ") #1 2 3 4 5 6