未分类

迭代器迭代器就是可以使用for循环的对象,list、str、tuple….那怎样才能实现这样的迭代?nums=[12,13,14]strs="python"tuples=(1,2,3,4,5)fornuminnums:print(num)一个对象可迭代的条件需要这个对象有__iter__()方法classClassmate(object):#有了这个方法该类就是可迭代的def__iter__(self):pass添加一个列表和添加方法给Classmate类classClassmate(object):def__init__(self):#存储self.namesList=list()defadd(self,other):#添加到列表里self.namesList.append(other)#有了这个方法该类就是可迭代的def__iter__(self):pass迭代器一个对象有__iter__()和__next__()方法叫迭代器如果使该对象可以返回迭代的数据:就需要一个迭代器的__next__()方法定义一个迭代器类classClassIterator(object):def__iter__(self):passdef__next__(self):pass完善一个可以执行的迭代器迭代对象的__iter__()方法需要返回一个迭代器对象#可迭代对象classClassmate(object):def__init__(self):self.namesList=list()defadd(self,other):self.namesList.append(other)#有了这个方法该类就是可迭代的def__iter__(self):#需要反对一个迭代器对象#把self传给迭代器,使迭代器可以获取self.namesListreturnClassIterator(self)#迭代器对象classClassIterator(object):def__init__(self,obj):self.nameList=obj.namesList#记录循环的次数self.count=0def__iter__(self):passdef__next__(self):ifself.count<len(self.nameList):name=self.nameList[self.count]self.count+=1returnnameelse:#自定义一个异常停止循环raiseStopIteration#主函数classmate=Classmate()#实例化对象classmate.add("小小")classmate.add("大大")classmate.add("中中")#for循环对象fornameinclassmate:print(name)把迭代对象类和迭代器类合并迭代对象和迭代器是两个类,那是否可以合并classClassmate(object):def__init__(self):self.namesList=list()self.count=0defadd(self,other):self.namesList.append(other)#有了这个方法该类就是可迭代的def__iter__(self):#需要反对一个迭代器对象#把列表传给迭代器returnselfdef__next__(self):ifself.count<len(self.namesList):name=self.namesList[self.count]self.count+=1returnnameelse:#自定义一个异常停止循环raiseStopIteration