Python迭代器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python迭代器相关的知识,希望对你有一定的参考价值。
名词解释:
生成器:generator
迭代器:Iterator
可迭代对象:Iterable
什么是迭代器?
可以被next()
函数调用并不断返回下一个值的对象称为迭代器:Iterator
。
Iterator
对象表示的是一个数据流
满足两个条件:1.有iter方法
2.可以使用next方法
有哪些可迭代对象?
list
tuple
dict
string
generator(两种方式)
判断是否是可迭代对象:
这些可以直接作用于for
循环的对象统称为可迭代对象:Iterable
。
>>> from collections import Iterable >>> isinstance([], Iterable) True >>> isinstance({}, Iterable) True >>> isinstance(‘abc‘, Iterable) True >>> isinstance((x for x in range(10)), Iterable) True >>> isinstance(100, Iterable) False
判断是否是迭代器对象
>>> from collections import Iterator >>> isinstance((x for x in range(10)), Iterator) True >>> isinstance([], Iterator) False >>> isinstance({}, Iterator) False >>> isinstance(‘abc‘, Iterator) False
生成器都是Iterator
对象,但list
、dict
、str
虽然是Iterable
,却不是Iterator
。
你可能会问,为什么list
、dict
、str
等数据类型不是Iterator
?
这是因为Python的Iterator
对象表示的是一个数据流,Iterator对象可以被next()
函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration
错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()
函数实现按需计算下一个数据,所以Iterator
的计算是惰性的,只有在需要返回下一个数据时它才会计算。
Iterator
甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。
for循环内部三件事
1.调用可迭代休想的iter方法,返回一个迭代器对象
2.调用迭代器的next方法
3.处理stopinteration异常
以上是关于Python迭代器的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在这个 python 片段中得到 float 是不可迭代的? [复制]
python:可迭代对象,迭代器,生成器函数,生成器的解析举例代码说明