从零开始学Python-Day23-迭代器

Python零基础 木人张 3年前 (2020-03-27) 1547次浏览 0个评论 扫描二维码

可直接作用于for循环的对象我们称之为可迭代对象Iterable:
一类是数据集合类型:list、tuple、dict、set、str
还一类就是生成器以及带yield的生成器函数
可以用isinstance()判断一个对象是否为可迭代对象:

>>> isinstance([],Iterable)
True
>>> isinstance({},Iterable)
True
>>> isinstance('abc',Iterable)
True
>>> isinstance((x for x in range(10)), Iterable)
True
>>> isinstance(100, Iterable)
False
>>> 

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

>>> from collections.abc import Iterator
>>> isinstance((x for x in range(10)),Iterator)
True
>>> isinstance([],Iterable)
True
>>> isinstance([],Iterator)
False
>>> isinstance({},Iterator)
False
>>> isinstance('abc',Iterator)
False

生成器都是迭代器对象,但不是所有可迭代的对象都是迭代器的对象,如list、dict、str,要把他们变成可迭代器的对象使用iter()函数:

>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True

Python的Iterator对象表示的是一个数据流,可以被next函数一直调用直到出现停止迭代错误返回,虽然是一个有序数列,但无法提前直到有多少,只能不断next计算出下一个数字,没有要求计算下一个数据,计算机不会计算下一个是什么。
迭代器可以做出整个自然数数列,也就是一个无限大的数据流,但list做不到。
Python的for循环的本质就是循环调用next函数


木人张,版权所有丨如未注明 , 均为原创,禁止转载。
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址