学会使用迭代器

发布于:2022-12-19 ⋅ 阅读:(172) ⋅ 点赞:(0)

迭代器

  • 迭代器即用来迭代取值的工具,而迭代是重复反馈过程的活动,其目的通常是为了逼近所需的目标或结果,每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值,单纯的重复并不是迭代

  • 迭代器是用来迭代取值的工具,而涉及到把多个值循环取出来的类型有:列表、字符串、元组、字典、集合、打开文件

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)
  1. d.__iter__()得到一个迭代器对象
  2. 迭代器对象.__next__()拿到一个返回值,然后该返回值赋值给i
  3. 循环往复步骤2,直到抛出StopIteration异常for循环会捕捉异常然后结束迭代。

可迭代对象不是迭代器对象

迭代器对象是可迭代对象


网站公告

今日签到

点亮在社区的每一天
去签到