生成迭代器
在可迭代对象上调用iter(),就会生成一个迭代器。即 迭代器 = iter(可迭代对象)
所以,可迭代对象必须内部实现__iter__()函数,返回一个迭代器。
但是迭代器也不是任何对象都可以充当的,必须要满足迭代器协议:内部实现__iter__()函数,返回迭代器对象本身
内部实现next()函数(Python3是__next__()函数),返回下一个元素,遍历完成时需要抛出StopIteration异常。
下面实现分为内置和外置迭代器:内置迭代器封装更好,并能将迭代器功能和对象的其他功能进行解耦。
class Student(object):
def __init__(self,name,No,age = 12):
self.__name = name
self.__No = No
self.age = age
def name(self):
return self.__name
class Class(object):
def __init__(self,stus):
self.__stus = stus
self.__inter = StudentInterator(self.__stus)
def __iter__(self):
print("start to inter")
return self.__inter
def __next__(self):
return self.__inter.__next__()
def reset(self):
self.__inter.reset()
class StudentInterator(object):
def __init__(self,student):
self.__student = student
self.__index = 0
def __iter__(self):
return self
def __next__(self):
if self.__index < len(self.__student):
val = self.__student[self.__index]
self.__index += 1
return val
raise StopIteration
def reset(self):
self.__index = 0
if __name__ == "__main__":
#外置迭代器实现
student = [Student("Tangyuyu",1),Student("tangyuan",2),Student("zhangjing",3)]
Student_Inter = StudentInterator(student)
inter = Student_Inter.__next__()
print(inter.name())
for s in Student_Inter:
print(s.name())
print(s.age)
#内置迭代器实现
class_ = Class(student)
for s in class_:
print(s.name())
class_.reset()
for s in class_:
print(s.name())