python笔记:迭代器用法

迭代器、迭代的工具

什么是迭代:指的是一个重复的过程,每一次重复称为一次迭代,并且每一次重复的结果是下一次重复的初始值

while True:
    print('hello world')

上面这种方式只有重复,结果并不是下一次的初始,所以不是迭代

例:不用for循环,用while循环将下边几种数据类型逐个取出

字符串:s = 'helloworld'

列表:l = ['a','b','c','d','e']

元组:t = ('a','b','c','d','e')

字典:dict1 = {'name' : 'aaa', 'age' : 18, 'job' : 'IT'}

集合:set1 = {'a','b','c','d','e'}

文件:f = open('a.txt', 'w', encoding='utf-8')

整数:12345 (不能迭代)

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

如果经过上边的循环进行测试会发现:

对于序列类型的字符串,列表,元组可以依赖于索引来迭代取值,

但是字典,集合,文件却不行,所以,python必须为我们提供一种不依赖于索引取值的方法,就是迭代器

可迭代对象

判断是否是可迭代对象

可以在pycharm软件中试验,如果有"xx.__iter__"这种用法那么就是能变成可迭代对象

"xx.__iter__"就是把一个对象变成可迭代对象"xx.__iter__" 可以简写成 "iter(xx)"

迭代器对象

"xx.__iter__""xx__next__"这两种方法的就是迭代器对象

 

print(f is f.__iter__())  #f是上边的文件类型

 



运行结果:

由此看出,文件类型本身就是可迭代对象
 next方式取值
dict1 = {'name' : 'aaa', 'age' : 18, 'job' : 'IT'}
d_items = dict1.__iter__()
res = d_items.__next__()
res1 = d_items.__next__()
res2 = d_items.__next__()
print(res)

可以调取 res,res1,res2,分别是三个key然后就可以根据key的来调取值了,"xx.__next__()" 可以简写成 "next()"

但是它每取一个值要多一条代码,只能一个一个取,迭代器优点:同一时间在内存里只有一个值,节省内存空间

若想一起取,所以我们要采用while方式

dict1 = {'name' : 'aaa', 'age' : 18, 'job' : 'IT'}
d_items = dict1.__iter__()
while True:
    res = d_items.__next__()
    print(res)

因为系统会停止迭代报错

 

 

 

 异常处理:try....except +错误

dict1 = {'name' : 'aaa', 'age' : 18, 'job' : 'IT'}
d_items = dict1.__iter__()
while True:
  try:
    res = d_items.__next__()
    print(res)
  except StopIteration:
    break


运行结果:

,这样就可以取值了,

过以上的步骤,我们知道了取值的原理及过程,这个原理同样也是for循环的原理
dict1 = {'name' : 'aaa', 'age' : 18, 'job' : 'IT'}
for i in dict1:     #相当于dict1.__iter__(),即变成可迭代对象
    print(i)
运行结果:

 

 

总结

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

迭代器对象一定是可迭代对象

posted @ 2021-07-02 17:10  Tester-**  阅读(97)  评论(0编辑  收藏  举报