python迭代器
迭代器的特征可以从两个方法切入
__next__和__iter__这两个方法
如果只包含__iter__方法,那么只能说可迭代,不能称之为迭代器,一般可迭代的每次循环都会生成一个新的迭代器,而迭代器每次循环使用的都是同一迭代器,这里可能阐述的有点模糊,下面列举一个例子
由上可以看出,ret其实是一个生成器,而生成器也是一个迭代器,但迭代器不能说是一个生成器
第一次循环,可以完整的取出ret中所有内容,然而第二次循环什么也没取出,原因是上一次循环已经把内容全部取出,所以这次无法再从ret中获取值,这里循环实际调用的是__next__方法
下面是可迭代的一个例子,对比可明显了解这两者的区别
我们这里了解的两个方法带有两组双下划线,而这种方法被称为双下方法。见名知意。
这里插入一个交集的概念
如图
我们这里介绍两个协议:可迭代协议和迭代器协议
可迭代协议:只要含有__iter__的方法都是可迭代的
迭代器协议:内部含有__iter和__next方法的就是迭代器
迭代器的好处:节省内存空间
迭代器不会在内存中再占用一大块内存,而是随着循环每次生成一个,每次__next__给我们一个
好了,迭代器的概念今天就介绍到这里。