迭代器: 有next与__iter__方法的对象:
#!/usr/bin/env python
#coding=utf-8
class Fib:
def __init__(self):
self.a,self.b = 0,1
def next(self):
self.a,self.b = self.b,self.a+self.b
return self.a
def __iter__(self):
return self
生成器: 使用yield返回值的函数:
#!/usr/bin/env python
#coding=utf-8
def fib():
a,b = 0,1
while True:
a,b = b,a+b
yield a
两个都能很优雅的输出费布拉切数列。 好处是值都是返回的时候才生成, 不会弄一个庞大的列表占内存。
执行方式分别为:
迭代器:
fibs = Fib()
for f in fibs:
if f < 10000:
print f
else:
break
for f in fib():
if f < 10000:
print f
else:
break
迭代器应用场景:
将遍历和取值的过程封装到next内部, 只返回一个可迭代对象。
生成器应用场景:
所有返回顺序可遍历对象(列表,元组,集合...)的函数,且该返回只做单次遍历业务用, 都适合用生成器来改写,少用很多内存。