iterator: 任何实现了__iter__和 __next__方法的对象都是迭代器
__iter__ 返回迭代器自身
__next__返回容器中的下一个值
如果容器中没有更多元素,则抛出Stoplteration异常2
generator:生成器其实是一种特殊的迭代器,不需要自定义__iter__ 和__next__
生成器函数(yield)
生成器表达式
例如1
自定义一个迭代器,实现斐波那契数列
class Fib(object):
def __init__(self,max):
self.x = 0
self.y = 1
self.max = max
def __iter__(self):
return self
def __next__(self):
n_next = self.y
self.x,self.y = self.y,self.x+self.y
if self.max >self.x:
return n_next
else:
raise StopIterration('随便报一个错')
例如2
自定义一个生成器函数,实现斐波那契数列
def fid(max) :
x = 0
y = 1
while y<max:
yield y
x,y=y,x+y
例如3
定义一个随机数迭代器,随机范围为[1,50],最大迭代次数30
import random
def Itertion()
for i in range(30):
yield random.randint(1,50)
item = Itertion()
for i in item :
print(i)
迭代器和生成器有什么好处
节省空间
惰性求值