Python3基础-迭代器

迭代器介绍

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 
"""

 

posted @ 2019-10-21 15:30  槑槑DE  阅读(346)  评论(0编辑  收藏  举报