迭代器
迭代器就是可以使用 for 循环的对象, list 、str 、tuple ….
那怎样才能实现这样的迭代?
nums = [12,13,14] strs = "python" tuples = (1,2,3,4,5) for num in nums: print(num)
一个对象可迭代的条件
需要这个对象有 __iter__()
方法
class Classmate(object): # 有了这个方法 该类就是可迭代的 def __iter__(self): pass
添加一个列表
和添加
方法给Classmate类
class Classmate(object): def __init__(self): # 存储 self.namesList = list() def add(self, other): # 添加到列表里 self.namesList.append(other) # 有了这个方法 该类就是可迭代的 def __iter__(self): pass
迭代器
一个对象有 __iter__()
和 __next__()
方法叫迭代器
如果使该对象可以返回迭代的数据:就需要一个迭代器的__next__()
方法
定义一个迭代器类
class ClassIterator(object): def __iter__(self): pass def __next__(self): pass
完善一个可以执行的迭代器
迭代对象的 __iter__()
方法需要返回一个迭代器对象
# 可迭代对象 class Classmate(object): def __init__(self): self.namesList = list() def add(self, other): self.namesList.append(other) # 有了这个方法 该类就是可迭代的 def __iter__(self): # 需要反对一个 迭代器对象 # 把 self 传给 迭代器, 使迭代器可以获取 self.namesList return ClassIterator(self) # 迭代器对象 class ClassIterator(object): def __init__(self, obj): self.nameList = obj.namesList # 记录循环的次数 self.count = 0 def __iter__(self): pass def __next__(self): if self.count < len(self.nameList): name = self.nameList[self.count] self.count+=1 return name else: # 自定义一个异常 停止循环 raise StopIteration # 主函数 classmate = Classmate() # 实例化对象 classmate.add("小小") classmate.add("大大") classmate.add("中中") # for 循环对象 for name in classmate: print(name)
把 迭代对象类 和 迭代器类 合并
迭代对象和迭代器是两个类,那是否可以合并
class Classmate(object): def __init__(self): self.namesList = list() self.count = 0 def add(self, other): self.namesList.append(other) # 有了这个方法 该类就是可迭代的 def __iter__(self): # 需要反对一个 迭代器对象 # 把 列表 传给 迭代器 return self def __next__(self): if self.count < len(self.namesList): name = self.namesList[self.count] self.count+=1 return name else: # 自定义一个异常 停止循环 raise StopIteration
版权声明:《 Python 迭代器原理简述 》为明妃原创文章,转载请注明出处!
最后编辑:2019-11-9 09:11:54