在python中进行循环迭代取数据大多使用for语句,for语句可以迭代的类型有许多,但是与Iterator和Iterable有什么关系呢?
字面翻译:Iterator是迭代器,而Iterable是可迭代的意思。
像我们常用的list,tuple,dict,set,str通过代码可以发现都属于可迭代的,即Iterable:
那什么是Iterator呢?同样对上面的例子进行一遍测试:
很明显,以上的都不是迭代器。迭代器表示的是一种数据流,这个数据流我们可以是无止尽的,所以像集合的访问方式(通过下标或者key)就不适用了。Iterator引入了next()函数,用于不停的调用下一个数据,一直到没有数据为止。此时会抛出StopIteration的错误。
可以通过Iter()函数将Iterable变为Iterator,就可以调用next()函数了。
借用廖大神的话:https://www.liaoxuefeng.com/wiki/1016959663602400/1017323698112640
凡是可作用于for
循环的对象都是Iterable
类型;
凡是可作用于next()
函数的对象都是Iterator
类型;