迭代器

一、迭代器

1、什么是迭代器:
    迭代器指的就是迭代取值的工具
    迭代是一个重复的过程,但不是单纯的重复,每次重复都是基于上一次的结果的而进行的
2、迭代器作用:
      为了找到一种通用的迭代取值方案
      为了节省内存
3、如何用迭代器
    内置有__iter__方法的类型都称之为可迭代的对象
    但凡调用了__iter__方法,就会将该类转换成迭代器对象
        res=值.__iter__()
4、迭代器对象的特点:
内置有__next__方法
内置有__iter__方法-》for循环
5、迭代器优缺点总结:
        优点:
            1、提供了一种不依赖于索引一种通用迭代取值方案
            2、惰性计算,节省内存
        缺点:
            1、取值麻烦
            2、无法预测值的长度
            3、一次性的
6、可迭代的对象
"hello".__iter__
[].__iter__
(11,).__iter__
{"k1":111}.__iter__
{11,22}.__iter__

f=open("a.txt",mode='wt')  # 迭代器对象
f.__iter__
7、迭代器对象
l=[11,22,33]
iter_l=l.__iter__()
print(iter_l.__next__())
print(iter_l.__next__())
print(iter_l.__next__())
8、迭代器对象和迭代对象区别
迭代器对象同时可以iter和next
迭代对象可以iter
迭代器对象再次iter,自己和结果判断is为True

二、示例

1、迭代
info={'name':"egon","age":18,"gender":"male"}
iter_info=info.__iter__()  #先将迭代对象处理成迭代器对象
print(iter_info.__next__())  #迭代器依次取值
print(iter_info.__next__())
print(iter_info.__next__())
print(iter_info.__next__())  #没值了就会报错
print(iter_info.__iter__().__iter__()  is iter_info) #迭代器iter自己
=======================》
    print(iter_info.__next__())
StopIteration
name
age
gender
True
2、循环迭代
l={'name':"egon","age":18,"gender":"male"}

iter_l=iter(l)  # l.__iter__()
while True:
    try:
        print(next(iter_l))
    except StopIteration:
        break
=============》
name
age
gender
3、验证迭代器的一次性
l=[11,222,333,444,555]
iter_l=iter(l)

for item in iter_l:  #
    print(item)
print('=====')#此处第一次取完
for item in iter_l:  
    print(item)  #第二次取值什么都没
================》
11
222
333
444
555
====

三、for循环原理

1、调用可迭代对象.__iter__(),拿到一个迭代器对象
2、调用next(迭代对象),将返回值赋值变量item
3、循环往复,直到抛出异常Stopiteration,for会检测异常然后结束循环
示例:
f=open('a.txt',mode='rt',encoding='utf-8')
for line in f:
    print(line)

print('======')
for line in f:
    print(line)

f.close()
===========》
mac,20000,3

lenovo,3000,10

tesla,1000000,10

chicken,200,1
======

原文地址:https://www.cnblogs.com/qiukangle/p/14115533.html