迭代是指重复的过程,是迭代取值的工具,迭代中的每一次重复都是基于上次一结果,提供了一种通用的不依赖索引的迭代取值方式。
可迭代对象可以通过 isinstance(obj,Iterable)来查看
from collections import Iterable
print(isinstance("abc",Iterable))
#输出为“True”
会运行出bool值,若为True则为可迭代对象,反之不是可迭代对象。
可迭代对象包含: str,list,tuple,dict,set,以及generator(生成器)。
迭代器一定是可迭代对象,但可迭代对象不一定是迭代器。
可通过以下方法查看是否为迭代器:
from collections import Iterator
li=[1,2,3]
print(isinstance(li,Iterator))
#输出为“Flase”
相同的会运算出bool值,以此来判断是否为迭代器。
那么迭代器到底是什么呢?
可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator)。
当我们遇到可迭代对象但想将它当作迭代器使用时可以使用iter()方法转化。
li_=iter(li)
print(type(li_))
#输出为“list_iterator",即已经转换为迭代器。
迭代器该怎么去取值呢?
注意不可以使用索引的方法取值,只能使用next()方法取值
print(li_._ _next_ _())
print(next(li_)
.......
.......
#当运行到末尾时,即超出长度时会报错。
#运行结果为 1
# 2
# 3
# 4
# 报错
li_._ _next_ _方法在这里和next()方法是一样的。
也可以使用遍历的方法取值
for i in li_:
print(i)
#结果为1 2 3 4
总结:
1,可以用for循环的都是可迭代对象。(python中的for循环本质上都是通过不断调用next()来实现的)
2,作用于next()都是迭代器类型。
3,list,dict都是可迭代对象但是并非迭代器,因为next()不能调用它们,可使用iter()将它们转换为迭代器。
注意:当出现以下错误时
只需要在collections后加上abc即可。因为高版本的pycharm在使用此库有可能会出现错误。
import collections.abc from Iterator