Python迭代器

什么是迭代器:

  迭代是一个重复的过程,每一次重复都是基于上一次的结果而来的(单纯的重复并不是迭代)

为什么要用迭代器:

基于索引的迭代器取值方式只适用于列表,元组,字符串类型,而对于没有索引的字典,集合,文件则不能通过索引取值。

而迭代器是一种通用的不依赖于索引的迭代器取值方式

迭代器适用于可迭代的数据类型

可迭代的对象包含(即可以调用python内置_iter_方法的对像):

1.字符串

2.类表

3.元祖

4.字典

5.集合

迭代器对象:(指即内置有_iter_方法_next_方法

执行迭代对象的_iter_方法---------》》》得到的就是内置的就是迭代器对象

(迭代器一旦取值干净,再继续取就会抛出StopIterable错误)

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

文件不用转本身就是迭代器对象

例如1:字典通过转成迭代器对象取值
dic={'a':1,'b':2,'c':3}
dic_iter=dic.__iter__()
print(dic_iter.__next__())   # a
print(dic_iter.__next__())   # b
print(dic_iter.__next__())   # c

例如2:

user={'name':'yangzhizong','age':21,}
info=user.__iter__()
k1=info.__next__()
print(k1)
k2=info.__next__()
print(k2)

例如3:

另外一种方式通过while循环取值,并且限定取值结束后自动结束
user={'name':'yangzhizong','age':21,}
info=user.__iter__()
while True:
    try:
        print(info.__next__())
    except StopIteration:
        break

重点:其实for循环的工作原理,就是基于迭代器工作
in后面跟的一定要是可迭代的对象,进而拿到迭代器对象
user={'name':'yangzhizong','age':21,'hobbies':'study'}
for k in user:      #user_iter=user_iter_()
    print(k)

执行迭代器对象的_next_得到的是迭代器的下一个值

执行迭代器对象的_iter_得到的仍是迭代器本身

(为了把for循环统一起来,in后面不用判断是可迭代对象还是迭代器对象(文件))

优点:

1.提供一种统一的、不依赖于索引的迭代方式

2.惰性计算,节省内存

缺点:

1.无法获取长度(只有在next完毕才知道到底有几个值)

2.一次性的,只能往后走,不能往前退

l=['a','b','c','d']
l1=l.__iter__()
print(list(l1))  #第一次会把l里面的参数全部取出,后面就不会再取
print(list(l1)) #为空
print(l) 

s=[1,2,3,4]
print(s.__len__())
print(len(s)) #可以简化书写方式


name=['a','b','c']
iter_name=iter(name) #可以简化书写方式
print(next(iter_name))
原文地址:https://www.cnblogs.com/yangzhizong/p/9173223.html