迭代器是实现了迭代器协议的对象(在Python中为定义了next方法)
next函数会返回集合对象中的下一个元素,若没有下一个元素泽会引发StopIteration异常
在迭代器内部会捕获这个异常来结束便利
迭代器最大的优势在于每次只从集合对象中取出一个元素,极大地节约了内存。
例如我们逐行读取一个文件的内容,使用readlines我们可以这样写:
for line in open('test.txt').readlines():
print(line)
这样写的问题就在于readlines()会将整个文件读入内存,这样可能就会造成内存不够用的情况,而且这种方法非常的浪费内存。
然而利用文件对象的迭代器,我们可以这样写:
for line in open('test.txt'):
print(line)
这是最简单也是速度最快的写法,利用了迭代器每次读取下一行文件。
所以建议多使用yield,这样就会把函数变为生成器,而生成器是一个特殊的迭代器,能够提升程序的性能。
函数没执行到yield关键字时,会将函数的执行现场保存到变量中,然后返回yield后的值并挂起。