迭代器
python中只要实现了__iter__
和__next__
方法的对象都可以称之为迭代器,迭代器是一个带状态的对象,可以记录迭代的位置。
我们可以这样理解,迭代器对象中存在一个有序的序列,每当我们使用实现一次__next__
方法,迭代器就会按照顺序吐出序列中的下一个值,直到把所有的值全部吐出之后,抛出StopIteration异常。
生成器
python中的生成器是一种特殊的迭代器,因为生成器生成的是一个迭代器对象,而这个迭代器中只有一个值,也就是说生成器生成的这个迭代器只可以迭代一次。
例如我们对一个函数使用yield关键字进行值得返回,就可以实现python简单的生成器,例如
def get_num():
for i in range(10):
yield i
print(get_num())
以上的输出为:
<generator object get_num at 0x0000021AF48CA200>
每当我们调用该生成器时,生成器就运行一次,但是该生成器内部的for循环并不是全部运行完后返回的值,我们可以使用如下方法证明:
如此一来就证明生成器生成的迭代器中只有一个值,当程序需要时,生成器会从上次的“断点”位置再次运行,进而再次生成一个迭代器,直到生成器中无法在生成新的迭代器而终止。
以上纯属个人理解,如有错误欢迎指正