迭代器
一、可迭代对象
可以直接作用于for循环的对象统称为可迭代对象,即iterable
1、常见的可迭代对象
常见迭代对象:str list tuple dict set range
2、判断可迭代对象的方法
方式一:dir(对象)
如果含有__iter__,那这个对象就叫做可迭代对象
str1='hello' print('__iter__'in dir(str1))#True li=['alex','sb'] print('__iter__'in dir(li))#True num=2018 print('__iter__'in dir(num))#Flase
方式二:isinstance()方法
from collections import Iterable str1='hello'#字符串为可迭代对象 print(isinstance(str1,Iterable))#True li=['alex','hehe']#列表为可迭代对象 print(isinstance(li,Iterable))#True num=2018 print(isinstance(num,Iterable))#False
二、迭代器
对于序列类型:字符串列表元组,我们可以使用索引的方式迭代取出其包含的元素。但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖索引的迭代方式,这就是迭代器
可迭代对象执行obj.iter()得到的结果就是迭代器对象
迭代器对象指的是即内置有__iter__又内置有__next__方法的对象
1、可迭代对象转换迭代器
str1='ABC' strIter=str1.__iter__()#得到迭代器对象,迭代器对象即有__iter__又有__next__ print(strIter)#结果为迭代器 print(strIter.__next__()) print(strIter.__next__()) print(strIter.__next__())
2、迭代器的优缺点
优点:
提供一种统一的、不依赖于索引的迭代方式
惰性计算,节省内存
缺点:
无法获取长度(只有在next完毕才知道到底有几个值)
一次性的,只能往后走,不能往前退