Python之迭代器
迭代器的作用:用来做迭代。(我擦,好似废话一般的存在!!!)可以不用for和while循环,遍历数据类型的元素,拿取元素也不需要索引。
迭代是在描述一个重复的过程。那么问题来了,啥子东西是重复的哩。for and while。
类似循环一样,将有序数据类型的数据,按索引值,顺序取来,来呀来呀来呀!
但是呀,重点来了,but。有序数据类型可以用循环来有序的挨个的取出来,可以无序的也想出来,咋办。
所以说,亲:迭代器了解下,服务周到,安全可靠。
迭代器功能的发挥场所:
用是有前提的。Python解释器为可以被迭代的数据类型,都设了一个 __iter__ 方法。只有有iter方法的数据类型,才可以用。
有__iter__ 方法的,就叫做可迭代对象。
d = {"a":2,"b":8,"l":4,} d.__iter__() #只要有iter方法,就是可以迭代的。 d.__iter__() == iter(d)
执行d.__iter__ ,是它赋予变量任何,比如H,这个H就是迭代器,亲。
一旦有了H。就可以在H里用next方法。next,就是下一个嘛。他就可以是迭代器一个一个的出值,听着是不是有点便秘。哈哈哈哈哈。
但是,next是有限的。你的数据类型里有多少元素,就可以next多少下,超出的话,会报一个超出范围的错。也可以说是一个结束信号的红字提示。
迭代器提供了一种不依赖索引值取值的方式,这样就可以遍历那些没有索引值的可迭代对象,比如文件,字典,集合。
迭代器,比数据类型要更节省内存。迭代器是每next一下,才出一个值。相比列表什么的,一下子将数据放入内存相比。相当省空间。所以呀。迭代器是惰性计算。
凡事有利有弊:
迭代器的缺点是:
1.在知道要去某一位置的值时,迭代器要先迭代出之前的,才能拿到值。这点就不如列表。
2.迭代器无法获取长度。无法知道被迭代的对象有多少元素。
3.迭代器只能一次性的往后取值,无法取上一个值。
用 from collections import Iterable,Iterator 的两个方法,可以查看可迭代对象和迭代器对象。
from collections import Iterable,Iterator s='hello' l=[1,2,3] t=(1,2,3) d={'a':1} set1={1,2,3,4} f=open('a.txt') #都是可迭代的 # s.__iter__() # l.__iter__() # t.__iter__() # d.__iter__() # set1.__iter__() # f.__iter__() # print(isinstance(s,Iterable)) # print(isinstance(l,Iterable)) # print(isinstance(t,Iterable)) # print(isinstance(d,Iterable)) # print(isinstance(set1,Iterable)) # print(isinstance(f,Iterable)) #查看是否是迭代器 print(isinstance(s,Iterator)) print(isinstance(l,Iterator)) print(isinstance(t,Iterator)) print(isinstance(d,Iterator)) print(isinstance(set1,Iterator)) print(isinstance(f,Iterator))
Iterable 是否可迭代 返回布尔值。
Iterator 是否是迭代器,返回布尔值。