python中关于迭代器和生成器的名词解释(python3)

  1. 迭代器协议:对有__next__方法的对象(迭代器对象)自动调用__next__方法,直到结尾引发stopIteration.
  2. 迭代工具:迭代工具按迭代协议处理迭代器
    1. 常见的工具有 for, list(), tuple(), str.join(), in map, sorted, zip, enumerate, filter, sum, any
  3. iterable可迭代对象:实现了__iter__方法的对象叫做可迭代对象
  4. iterator迭代器:实现了__next__方法的对象叫迭代器,迭代器需要同时实现__iter__和__next__方法
  5. for -- in 语句的执行逻辑:
    1. 首先判断对象是否有__iter__方法,如果有,先it = iter (instance),获取迭代器it,然后next(it)
    2. 否则,判断是否有__getitem__方法,有就按下标迭代
    3. 如果__iter__和__getitem__方法都没有,那么久报错
    4. 特殊情况是:str类型没有__iter__方法,但照样可以for-in,这是因为它有__getitem__方法
  6. 可迭代对象iterable根据有没有__next__方法分为两种:
    1. 有__next__方法:
      1. 其本身就是iterator迭代器。手动迭代时可以去掉it = iter(instance),直接next(iterable),比如文件对象。
    2. 无__next__方法:
      1. 手动迭代时必须执行it = iter(instance) 和 next(it),比如列表,range()。
  7. 可迭代对象iterable根据__iter__返回是否是自身分为两种:
    1. __iter__返回self自身:
      1. 那么it1 = iter(f), it2 = iter(f)是同一个对象,也就是说只支持一个迭代器,那么这时它必然有__next__方法
    2. __iter__不返回自身:
      1. 返回新的对象,那么it1 = iter(f), it2 = iter(f)是两个对象,也就是支持多个迭代器,此时要求返回要实现__iter__方法

猜你喜欢

转载自blog.csdn.net/qq_37653394/article/details/82888506