迭代器介绍
1、迭代器是一个可以记住遍历的位置的对象。
2、迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
3、迭代器有两个基本的方法:iter() 和 next()。
4、迭代器是用来迭代取值的工具,每一次迭代得到的结果会作为下一次迭代的初始值;单纯的重复并不是迭代
可迭代对象
1、语法形式上,内置有__iter__方法的对象都是可迭代对象
2、字符串、列表、元祖、字典、集合、打开的文件都是可迭代对象
str='susu'
str_iter=str.__iter__() #字符串
print(str_iter)
list=[1,2,'a']
list_iter=list.__iter__() #列表
print(list_iter)
dict={'name':'susu','paaswd':'123456'}
dict_iter=dict.__iter__() #字典
print(dict_iter)
tup=(1,2,3,4)
tup_iter=tup.__iter__() #元祖
print(tup_iter)
set={1,2,3,4,'yuyu'}
set_iter=set.__iter__() #集合
print(set_iter)
with open('aa.txt','rb') as f:
f_iter=f.__iter__() #打开的文件
print(f_iter)
"""
执行结果
<str_iterator object at 0x02BF09F0>
<list_iterator object at 0x02BF0A30>
<dict_keyiterator object at 0x02C1F600>
<tuple_iterator object at 0x02C0EC90>
<set_iterator object at 0x02C1ED78>
<_io.BufferedReader name='aa.txt'>
"""
迭代器对象
1、调用obj.__iter__()方法返回的结果就是一个迭代器的对象
2、迭代器对象是内置有__iter__和__next__方法的对象
3、执行迭代器对象.__iter__()方法得到的仍然是迭代器本身
4、执行迭代器.__next__()就会计算出迭代器中的下一个值
str='susu'
str_iter=str.__iter__()
print(str_iter)
print(str_iter.__next__()) # 输出 s
print(str_iter.__next__()) # 输出 u
print(str_iter.__next__()) # 输出 s
print(str_iter.__next__()) # 输出 u
print(str_iter.__next__()) #异常,报错 StopIteration,代表无值可取,迭代结束
for 循环
#for循环又称为迭代循环,in 或可以跟任意的可迭代对象
str='H i ,My name is susu'
#首先会调用可迭代对象str内置的__iter__()方法拿到一个迭代器对象;
#然后再item = 迭代器对象.__next__(),执行循环体完成一次循环
#循环,直到捕捉StopIteration异常,结束迭代
for item in str:
print(item,'-',end='')
---不依赖索引迭代取值,用while循环
#字符串
str='H i ,My name is susu' #可迭代对象str
str_iter=iter(str) #相当于在调用str.__iter__(),返回str的迭代器对象
while True:
try:
print(next(str_iter),end='') #相当于在调用str_iter.__next__()
except StopIteration: #捕获异常 终止循环
break
#字典
dict={'name':'susu','paaswd':'123456'}
dict_iter=dict.__iter__()
print(dict_iter)
print(dict_iter.__next__())
print(dict_iter.__next__())
"""
执行结果
name
paaswd
"""
dict={'name':'susu','paaswd':'123456'}
dict_iter=dict.__iter__()
index=dict_iter.__next__()
print(dict[index])
index1=dict_iter.__next__()
print(dict[index1])
"""
执行结果
susu
123456
"""
#字典
dict={'name':'susu','paaswd':'123456'} #可迭代对象dict
dict_iter=iter(dict) #相当于在调用str.__iter__(),返回str的迭代器对象
while True:
try:
print(dict[next(dict_iter)],'',end='') #相当于在调用str_iter.__next__()
except StopIteration: #捕获异常 终止循环
break
"""
执行结果
susu 123456
"""