欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python 迭代器

程序员文章站 2022-06-29 13:48:48
python 迭代器,可作用于for循环的类型一: list tuple dict set str 还有数据结构generator 统称为:iterable 可以使用isin...

python 迭代器,可作用于for循环的类型一:

list tuple dict set str

还有数据结构generator 统称为:iterable

可以使用isinstance()判断一个对象是否为iterable对象

>>> from collections import iterable

>>> isinstance([],iterable)
true
>>> isinstance({},iterable)
true
>>> isinstance((),iterable)
true
>>> isinstance(([]),iterable)
true
>>> isinstance(100,iterable)
false

可以被next()函数调用并不断返回下一个值的对象称为迭代器:iterator(不一定是生成器,但生成器一定是迭代器)

可以通过dir命令,查看对象是否具有__next__

>>> from collections import iterator

>>> isinstance((x for i in range(5)),iterator)
true

>>> isinstance([],iterator)
false

可以把list dict str 等iterable 变成 iterator 通过使用iter()函数(内置函数):

>>> a=[1,2,3]
>>> iter(a)

>>> b=iter(a)
>>> b.__next__()
1
>>> b.__next__()
2

因为python的iterator对象表示的是一个数据流,iterator对象可以被next()函数调用不断返回下一个数据,直到没有数据时,抛出stopiteration错误,可以把这个数据流看作是一个有序序列,但我们不能提前知道序列的长度,只能next()实现按需求计算下一个,所以iterator 的计算是惰性的。

for循环的本质上就是利用next()实现的

文件对象的循环for line in f: 也是如此。