迭代器

什么是迭代器?

迭代是一个重复的过程,每次重复即以此迭代,并且每次迭代的结果都是下一次迭代的初始值

  1、为何要有初始值:

    对于序列类型、字符串、列表、元组,我i们可以使用索引的方式迭代取出其包含的元素;但对于字典、集合、文件等类型的时没有索引的,若还想去除内部包含的元素,则必须找到一中不依赖索引的迭代方式,这就是迭代器

  2、什么是可迭代对象:

    可迭代对象指的是内置有__iter__()方法的对象,即obj.__iter__()

  3、什么是迭代器对象: 

    可迭代对象执行 obj,.__iter__() 得到的结果就是迭代器对象,而迭代器对象指的是即内置有__iter__() 有内置有 __next__方法的对象

  4、文件类型四迭代对象

    open('a.txt')..__iter__()

    open('a.txt').__next__()

优点:

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

  2、惰性计算,节省内存

缺点:

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

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

再论 for 循环

  for 循环工作原理:

    1、执行 in 后对象的 dic.__iter__() 方法,得到一个迭代对象 iter_dic

    2、执行 next(iter_dic),将得到的值赋值给 k, 然后执行循环体代码

    3、重复过程2、直到捕捉到异常 StopIteration,,结束循环

可以直接作用于 for 循环的数据类型有以下几种:
    1、一类集合数据类型,如 list、tuple、dict、set、str 等

    2、一类是生成器 generator,包括生成器和带 yield 的generator function

  这些可以直接作用于 for 循环的对象统称为 可迭代对象, Iterabke。 可以使用 isinstance() 判断一个对象的是否是 Iterable 对象:

>>>from  colllection import Iterable
>>>isinstance([], Iterable)
True

>>>isindtance('abc', Iterable)
True


>>>isinstance((x for x in range(10)), Iterable)
True

>>>isinstance(100, Iterable)
False

可以使用 next() 函数调用的并不断返回下一个值的对象称之为迭代器: Iterator

  可以用isinstance() 判断一个对象是否是 Iterator 对象

>>> from collection import Iteratir
>>>isinstannce((x for x in range(10)), Iterator)
True

>>>isinstance("abc", Iterator)
False

>>>isinstance([], Iterator)
False

由for 循环开始,中间引申了 列表生成式、生成器、迭代器,他们之间的关系就是这样

 

原文地址:https://www.cnblogs.com/jcjc/p/11424490.html