迭代器

迭代器:

  迭代就指的是一个重复的过程,每次一次重复都是基于上一次的结果而来。

  之前取值的都是基于索引关系,使用列表、字符串、元组

li = ['a', 'b', 'c', 'd', 'e']
#li = ('a', 'b', 'c', 'd', 'e')
#li = 'hello'

i = 0
while i < len(li):
    print(li[i])
    i += 1

但是这种取值方式对于字典,集合,文件对象,所以Python产生一种迭代的机制。

为什么使用迭代器?

  为了找出一种通用的&可以不依赖索引的迭代取值方式。

如何使用迭代器?

  可迭代对象,但凡内置有__iter__方法的对象可以被称为可迭代对象

  迭代器对象,既内置有__iter__方法,也同时内置__next__方法被称之为迭代器对象。

关于__iter__方法:

  调用可迭代对象的__iter__方法会得到迭代器对象

  调用迭代器对象的__iter__方法会得到迭代器对象本身。

4. 总结迭代器的优缺点:
优点:
1. 提供了一种通用的&可以不依赖于索引的迭代取值方式
2. 同一时刻在内存中只有一个值,更加节省内存

缺点:
1. 取指定值不如索引灵活,并且迭代器是一次性的
2. 无法预知迭代器数据的个数
可迭代的对象: str,list,tuple,dict,set,文件对象
迭代器对象: 文件对象
 可迭代的对象=====》迭代器对象:调用可迭代对象内置的__iter__方法会有一个返回值,该返回值就是对应的迭代器对象
li = [1,2,3,4]
dic = {'a':1}
st = 'hello'
tup = ('a',1)
se = {'a','c','d'}
iter_li = li.__iter__()
iter_dic = dic.__iter__()
iter_st = st.__iter__()
iter_tup = tup.__iter__()
iter_se = se.__iter__()

f = open('a.txt',mode='w',encoding='utf-8')
iter_f = f.__iter__()
迭代器的内置方法__next__
print(iter_dic.__next__())
print(iter_dic.__next__())#超过元素个就会报错  StopIteration

可以使用try  Except来检测报错

while True:
    try:
        print(iter_st.__next__())
    except:
        break

for又被称为迭代循环:在底层是将可迭代对象或迭代器装换为迭代器,再循环取值的工作原理。


原文地址:https://www.cnblogs.com/msj513/p/9719837.html