迭代器

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

测开之路二十二:迭代器、生成器 随笔 第1张

StopIteration:停止迭代

 测开之路二十二:迭代器、生成器 随笔 第2张

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)

 

迭代器实现斐波那契

测开之路二十二:迭代器、生成器 随笔 第3张

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)

 

生成器

测开之路二十二:迭代器、生成器 随笔 第4张

生成器表达式

测开之路二十二:迭代器、生成器 随笔 第5张

 

生成器函数,yield返回表达式对象,不计算值,在大量数据的时候,占用很少内存

测开之路二十二:迭代器、生成器 随笔 第6张

 

生成器实现斐波那契

测开之路二十二:迭代器、生成器 随笔 第7张

 

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)

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄