class Fib(object): def __init__(self): self.a, self.b = 0, 1 # 初始化两个计数器a,b def __iter__(self): return self # 实例本身就是迭代对象,故返回自己 def next(self): self.a, self.b = self.b, self.a + self.b # 计算下一个值 if self.a > 100000: # 退出循环的条件 raise StopIteration(); return self.a # 返回下一个值
实现一个迭代器,必须包含__iter__和next这两个方法。可以有两种方法来使用这个class。
一,当做一个for循环来使用:
>>> for n in Fib(): ... print n ... 1 1 2 3 5 ... 46368 75025
二,调用next方法。
f = Fib() for i in range(10): print f.next()
打印结果得:
1 1 2 3 5 8 13 21 34 55
再来一个例子:
class A(object): def __init__(self, o): self.__obj__ = o def __getattr__(self, name): if hasattr(self.__obj__, name): return getattr(self.__obj__, name) return self.__dict__[name] def __iter__(self): return self.__obj__.__iter__() l = [] a = A(l) for i in xrange(101): a.append(i) print sum(a)
时间: 2024-11-08 23:54:55