python中的迭代器

可迭代对象

  • 可通过for…in 进行遍历的数据类型包括 list,tuple, dict, set, str;以及生成器generator,及带yield的生成器函数
  • 这些可直接作用于for循环的对象统称为可迭代对象:Iterable
from collections import Iterable
>>>isinstance('abc',Iterable)
>>>True
>>>isinstance((x for x in range(10)),Iterable)
>>>True
>>>isinstance(100,Iterable)
>>>False

迭代器

  • Iterator,无限大数据流,内部定义__next__( )方法,返回下一个值的对象
  • 生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator

返回迭代器对象

mylist=[1,2,3,4,5]
it=iter(mylist)
>>>next(it)
>>>1
>>>next(it)
>>>2
>>>it.__next__()
>>>3
>>>it.__next__()
>>>4
>>>next(it)
>>>5

两种方式等效,访问下一个元素

  1. 通过 it.next()
  2. next(it)

创建一个迭代器

class Fibs:
    def __init__(self):
        self.a=0
        self.b=1
    def __next__(self):
        self.a,self.b=self.b,self.a+self.b
        return self.a
    def __iter__(self):
        return self
        
  • 实现__iter__和__next__方法可自定义迭代器类
  • 实现__next__方法,可访问迭代器中的元素

生成器VS迭代器

  • 生成器:一种特殊的迭代器,只能被遍历一次,生成器表达式,生成器函数(yield)创建生成器
  • 迭代器:无限大数据流(容器),可通过实现__iter__( )和__next__( )方法,自定义迭代器类,注意与Iterable可迭代对象区别
原文地址:https://www.cnblogs.com/mengxiaoleng/p/11567633.html