可迭代对象
- 可通过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
两种方式等效,访问下一个元素
- 通过 it.next()
- 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可迭代对象区别