迭代器
StopIteration:停止迭代
class Cup(object):
def __init__(self):
''' 初始化函数,索引和数据初始化。 '''
self.index = 0
self.good = [1, 3, 5, 6]
def __iter__(self):
''' 这里固定返回对象自身self '''
return self
def __next__(self):
'''
这里每次返回一个元素,需要自己写个循环。
最后当数据取完时一定要抛出StopIteration这个异常。
'''
# print(self.index)
if self.index < len(self.good):
data = self.good[self.index]
self.index += 1
return data
else:
raise StopIteration
cup = Cup()
for c in cup:
print(c)
迭代器实现斐波那契
class Fibonacci(object):
def __init__(self, n):
self.n = n # 斐波那契有N项
self.index = 0 # 迭代器遍历时的索引
self.iterator = [0, 1] # 列表法生成斐波那契数列
for i in range(2, self.n + 1):
self.iterator.append(self.iterator[i - 1] + self.iterator[i - 2])
def __iter__(self):
''' 这里固定返回对象自身self '''
return self
def __next__(self):
if self.index <= self.n:
data = self.iterator[self.index]
self.index += 1
return data
else:
raise StopIteration
if __name__ == '__main__':
fib = Fibonacci(5)
for f in fib:
print(f)
生成器
生成器表达式
生成器函数,yield返回表达式对象,不计算值,在大量数据的时候,占用很少内存
生成器实现斐波那契
class Fibonacci(object):
def __init__(self, n):
self.n = n # 斐波那契有N项
self.index = 0 # 迭代器遍历时的索引
self.iterator = [0, 1] # 列表法生成斐波那契数列
for i in range(2, self.n + 1):
self.iterator.append(self.iterator[i - 1] + self.iterator[i - 2])
def generator(self):
for i in self.iterator:
yield i
if __name__ == '__main__':
fib = Fibonacci(5)
gen = fib.generator()
for g in gen:
print(g)