python——迭代器与可迭代对象

 

 

 

一、可迭代对象

 

1.  可以直接作用于 for 循环的对象统称为可迭代对象:Iterable

 

2.  可直接作用于 for 循环的对象:

 

一类是集合数据类型:list、tuple、dict、set、str等

 

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

 

 

3.  可以通过 isinstance()函数,判断是否为可迭代对象 Iterable

>>> from collections.abc import Iterable
>>> isinstance([],Iterable)#判断list
True
>>> isinstance({},Iterable)#判断dict
True
>>> isinstance('abc',Iterable)#判断str
True
>>> isinstance((x for x in range(10)),Iterable)#判断generator
True
>>> isinstance(100,Iterable)#判断数字
False
>>> isinstance((),Iterable)
True

  

 

二、迭代器

 

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

 

2.  生成器 generator 都是迭代器,但是 list、tuple、dict、set、str等不是迭代器

 

3.  可以通过 isinstance()函数判断一个对象是否为 Iterator 对象

>>> from collections.abc import Iterator
>>> isinstance([],Iterator)#判断list
False
>>> isinstance((),Iterator)#判断tuple
False
>>> isinstance((x for x in range(10)),Iterator)#判断generator
True
>>> isinstance('abc',Iterator)#判断str
False

  

 

4.  把list、tuple、dict、set、str等可迭代对象Iterable变成Iterator,可以用 iter()函数

>>> isinstance(iter([]),Iterator)
True
>>> isinstance(iter({}),Iterator)
True

Iterable可以通过 iter()函数得到一个 Iterator对象  

 

 

5.  Python的 Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出 StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

 

6.  python中 for循环的本质是通过不断调用 next()函数实现的

 

posted @ 2020-12-28 15:46  CannedDream  阅读(139)  评论(0编辑  收藏  举报