文章目录
简介
迭代是python引以为傲的强大功能之一,它拥有遍历所有值的能力,这也是一种访问集合元素的其中一个方式。他可以从第一个元素开始访问直到结束为止。但是迭代器只能够往前不能后退。在技术层面上,迭代器是实现迭代器协议的对象,其中的主要方法有:iter() 和 next()。
常见的迭代器对象如下所示:
list=["dtcloud","dtcloud360","中亿丰数字","苏州"]
it = iter(list) # 创建迭代器对象
for x in it:
print (x, end=" ")
创建迭代器
上文中提到迭代器在类中实现有两个方法,分别是iter() 和 next()。
iter() 方法会返回一个特别的对象,与init()方法类似,开发者可以执行操作(初始化等)。
next()方法会返回下一个迭代器对象。
下面的实例会创建一个返回数字的迭代器,从最初的1开始,逐步增加:
class Mydtcloud:
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = Mydtcloud()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
StopIteration 异常的作用是为了防止无限循环的出现,标记迭代已经完成。在next()方法中我们能够设置在指定的循环轮数结束之后激活StopIteration异常来完成迭代。
下面的实例会完成20次的迭代,随后结束任务:
class Mydtcloud:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass = Mydtcloud()
myiter = iter(myclass)
for x in myiter:
print(x)
生成器
使用了yield的函数在Python中被称之为生成器。生成器与通常的函数不同,它返回的是一个迭代器。相对的,生成器只能用于迭代操作,换句话讲,生成器也能够理解为一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
下面由实现斐波那数列来感受生成器的作用:
import sys
def fibonacci(n): # 生成器函数 - 斐波那契
a, b, dtcloud = 0, 1, 0
while True:
if (dtcloud > n):
return
yield a
a, b = b, a + b
dtcloud += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()