迭代器
迭代器即用来迭代取值的工具,而迭代是重复反馈过程的活动,其目的通常是为了逼近所需的目标或结果,每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值,单纯的重复并不是迭代
迭代器是用来迭代取值的工具,而涉及到把多个值循环取出来的类型有:列表、字符串、元组、字典、集合、打开文件
l = ['zhao', 'lisi', 'zhangsan ']
i = 0
while i < len(l):
print(l[i])
i += 1
"""此迭代取值的方式只适用于有索引的数据类型,列表,字符串....."""
而迭代器是不依赖于索引的
可迭代对象:但凡内置有__iter__
的方法的都称之为可迭代对象
通过索引的方式进行迭代取值,实现简单,但仅适用于序列类型:字符串,列表,元组。对于没有索引的字典、集合等非序列类型,必须找到一种不依赖索引来进行迭代取值的方式,这就用到了迭代器。
要想了解迭代器为何物,必须事先搞清楚一个很重要的概念:可迭代对象(Iterable)。从语法形式上讲,内置有__iter__方法的对象都是可迭代对象,字符串、列表、元组、字典、集合、打开的文件都是可迭代对象:
可迭代对象.__iter__()
:得到迭代器对象
str1=''
#str1.__iter__()
l=[]
#l.__iter__()
t=(1,)
#t.__iter__()
d={'a':1}
#d.__iter__()
set1={1,2,3}
#set1.__iter__()
with open('a.txt','w') as f:
# f.__iter__()
pass
迭代器对象:内置有__next__
方法并且内置有__iter__
方法的对象
目前只有文件既是可迭代对象,又是迭代器对象
迭代器对象.__next__()
:得到迭代器的下一个值
迭代器对象.__iter__()
:得到迭代器的本身,说白了调了就跟没调一样
d = {'a': 1, 'b': 2, 'c': 3}
d_iterator = d.__iter__()
print(d_iterator.__next__())
print(d_iterator.__iter__())
print(d_iterator is d_iterator.__iter__())#True
while循环
d = {'a': 1, 'b': 2, 'c': 3}
d_iterator = d.__iter__()
while True:
try:
print(d_iterator.__next__())
except StopIteration :
break
for循环工作原理
for循环又称为迭代循环,in后可以跟任意可迭代对象
d = {'a': 1, 'b': 2, 'c': 3}
d_iterator = d.__iter__()
for i in d:#d本身就是可迭代对象,调用d.__iter__()后返回的还是它本身
print(i)
d.__iter__()
得到一个迭代器对象迭代器对象.__next__()
拿到一个返回值,然后该返回值赋值给i- 循环往复步骤2,直到抛出StopIteration异常for循环会捕捉异常然后结束迭代。
可迭代对象不是迭代器对象
迭代器对象是可迭代对象