python之迭代器和生成器
迭代器
根本上说, 迭代器就是有一个 next() 方法的对象
迭代器可用内建的iter方法创建
>>> i = iter('abc') >>> i.next() 'a' >>> i.next() 'b' >>> i.next() 'c'
对类可用__iter__和next()创建迭代器
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 # 返回下一个值 for n in Fib(): print n ------------------------------- 1 1 2 3 5 ... 46368 75025
生成器
生成器是可以迭代的,但是只可以读取它一次
>>> g = (x*x for x in range(3)) >>> for i in gt : ... print(i) 0 1 4 >>> for i in g : ... print(i)
yield
#当你调用这个函数的时候,函数内部的代码并不立马执行, 这个函数只是返回一个生成器对象 def createGenerator(): mylist = range(3) for i in mylist: yield i*i >>> for i in mygenerator: print i 0 1 4 >>> for i in mygenerator: #也是只可调用一次 print i
2015-05-26