一、 迭代器
1.1 迭代器是什么?
迭代器是一个可以记住遍历的位置的对象,迭代器是任何实现了__next__()方法的对象,可以通过next(iteration)对其进行迭代,迭代结束时会抛出StopIteration异常
1.2 迭代器有什么用?
可以为python的容器类型生成迭代器,迭代器对象从容器的第一个元素开始访问,直到所有的元素被访问完结束,迭代器只能往前不会后退。python的容器类型包括列表、元组、字符串、字典、集合等等
1.3 怎么使用迭代器
通过迭代器两个基本的方法,iter()以及next(),可以对python的可迭代对象进行迭代。以列表为例:
当迭代到最后一个元素还没停止时则会报错:
4. 自行定义迭代器
自行把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__(),其中__iter__()会返回迭代器本身,__next__()方法从迭代器返回下一项。如果没有其他项,则引发StopIteration异常,下面通过代码自己构造迭代器:
首先定义一个迭代器类:
class MyIterator:
def __init__(self, max):
self.max = max
def __iter__(self):
self.n = 0
return self
def __next__(self):
if self.n < self.max:
self.n += 1
return self.n
else:
raise StopIteration
实例化这个类,这样my_iterator就成了可迭代对象:
my_iterator = MyIterator(5)
for i in my_iterator:
print(i)
结果是:
二、生成器
2.1 生成器是什么?
生成器(generator)其实是一类特殊的迭代器,它可以逐步产生我们想要的值,而不需要一次性计算并返回所有结果
2.2 生成器使用
生成器有两种使用方法
第一种方法是生成器表达式:
和迭代器一样,超出范围会报StopIteration异常
第二种方法是yield函数:
当在生成器函数中使用 yield 语句时,函数的执行将会暂停,并将 yield后面的表达式作为当前迭代的值返回。然后,每次调用生成器的next()方法或使用for循环进行迭代时,函数会从上次暂停的地方继续执行,直到再次遇到yield语句。这样,生成器函数可以逐步产生值,而不需要一次性计算并返回所有结果