day18_03_迭代器



#1 什么是迭代器
# 迭代器指的是迭代取值的工具,迭代是一个重复的过程,每次重复
# 都是基于上一次取值的结果而继续的,单纯的重复并不是迭代
# 列表,循环


#2 为什么有迭代器
# 迭代器是用来迭代取值的工具,而涉及到把多个值循环取出来的类
# 有:列表,字符串,元组,字典,集合,文件


# l=['egon','liu','alex']
# i=0
# while i < len(l):
# print(l[i])
# i += 1


#上述迭代取值的方式只适用于有索引的数据类型:列表,字符串,元组
#为了解决基于索引迭代取值的局限性
# python必须提供一种能够不依赖索引的取值方式,这就是迭代器


#3 如何用迭代器





# 4 可迭代对象:但凡内置有__iter__方法的都可称之为可迭代对象


#可迭代对象:字符串,列表,元组,字典,,集合,文件对象、
#迭代器对象:文件对象,内置有__next__()方法

# s1='' #字符串
# s1.__iter__()
#
# l=[] #列表
# l.__iter__()
#
# t=(1,) #元组
# t.__iter__()
#
# d={'a':1} #字典
# d.__iter__()
#
# set1={1,2,3} #集合
# set1.__iter__()
#
#
# with open('a.txt',mode='w',encoding='utf-8') as f: #文件,是可迭代对象,也是迭代器对象
# f.__iter__()
# f.__next__()



#调用可迭代对象下的__iter__方法会将其转换成迭代器对象,然后就可以执行__next__方法
# d={'a':1,'b':2,'c':3}
# d_iterator=d.__iter__()
# # print(d_iterator)
#
# print(d_iterator.__next__()) #返回字典的key 即 1
# print(d_iterator.__next__())
# print(d_iterator.__next__())
# # print(d_iterator.__next__()) #抛出异常 StopIteration 表示取值已经取完了


# while True:
# try: #捕捉异常
# print(d_iterator.__next__())
# except StopIteration: #出现异常中断
# break
#
# print('====>')
# #在一个迭代器取值取干净的情况下,再对其取值取不到
#
# d_iterator=d.__iter__()
# while True:
# try: #捕捉异常
# print(d_iterator.__next__())
# except StopIteration:
# break



# with open('a.txt',mode='rt',encoding='utf-8') as f:
# d=f.__iter__()
#
# while True:
# try:
# print(d.__next__())
# except StopIteration:
# break
# #



#4 可迭代对象与迭代器对象详解:

#3.1 可迭代对象(可以转成迭代器对象):内置有__iter__方法的对象
# 可迭代对象.__iter__():得到迭代器对象

#3.2 迭代器对象:内置有__next__方法并且内置有__iter__方法的对象
# 迭代器对象.__next__():得到迭代器的下一个值
# 迭代器对象.__iter__():得到迭代器本身,说白了调了和没调一样


# dic={'a':1,'b':2}
# dic.__iter__()
#
# dic_iter=dic.__iter__() #转成迭代器对象后,有__next()__方法
# dic_iter.__next__()
#
# print(dic_iter.__iter__() is dic_iter) #输出 True 即迭代器对象.__iter__()得到迭代器本身






#5 for 循环的工作原理:for循环可以称之为迭代器循环

# d={'a':1,'b':2,'c':3}

#1 d.__iter__()得到一个迭代器对象
#2 迭代器对象.__next__()拿到一个返回值,然后讲该返回值赋值给k
#3 循环往复步骤2,知道抛出异常StopIteration for循环会捕捉异常,然后结束循环

# for k in d:
# print(k)



# d_iterator=d.__iter__()
# print(d_iterator)

# while True:
# try: #捕捉异常
# print(d_iterator.__next__())
# except StopIteration: #出现异常中断
# break




# with open('a.txt',mode='rt',encoding='utf-8') as f:
# for line in f: #f.__iter__()
# print(line)


#list('hello") 原理同for循环





#6 迭代器优缺点总结:


# l=[1,2,3,4,5,6]
# l_iter=l.__iter__()
#
# print(l_iter.__next__())
# print(l_iter.__next__())
# print(l_iter.__next__())




#这种写法不对
# d=[1,2,3,4,5,6]
#
# d_iter=d.__iter__()
# d_next=d_iter.__next__()
#
# print(d_next)
# print(d_next)
# print(d_next)



























posted @ 2021-01-06 09:05  欢乐二次方  阅读(65)  评论(0)    收藏  举报