迭代器
class ClassMate(object): def __init__(self): self.names = list() self.index = 0 def add(self,name): self.names.append(name) def __iter__(self): return self def __next__(self): if self.index < len(self.names): ret = self.names[self.index] self.index += 1 return ret else: raise StopIteration class_mate = ClassMate() class_mate.add('张三') class_mate.add('李四') class_mate.add('王五') for name in class_mate: print(name)
from collections import Iterable from collections import Iterator class ClassMate(object): def __init__(self): self.names = list() def add(self,name): self.names.append(name) def __iter__(self): return ClassIterator(self) class ClassIterator(object): def __init__(self,obj): self.obj = obj self.index = 0 def __iter__(self): pass def __next__(self): if self.index < len(self.obj.names): ret = self.obj.names[self.index] self.index += 1 return ret else: raise StopIteration class_mate = ClassMate() class_mate.add('张三') class_mate.add("李四") class_mate.add('王五') for name in class_mate: print(name)
class Fibonacci(object): def __init__(self,num): self.num = num self.index = 0 self.a = 0 self.b = 1 def __iter__(self): return self def __next__(self): if self.index < self.num: ret = self.a self.a,self.b = self.b,self.a+self.b self.index += 1 return ret else: raise StopIteration fib = Fibonacci(10) for num in fib: print(num)