python 迭代器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 迭代器相关的知识,希望对你有一定的参考价值。

之前学过的list,tuple,dice,set,str,generator(包括生成器和带yield的generator函数)等都是可被for循环迭代的对象,都统称为可迭代对象:Iterable

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

如:

from collections import Iterable
isinstance([],iterable)   ==>True
isinstance(‘abc‘,iterable)  ==>True

等其他的实例,如字典,集合等


数字是不是可迭代对象

isinstance(100,iterable)
==结果===False====


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

from collections import iterator
isinstance((x for x in range(10)),Iterator)  ==>True
isinstance([],Iterator)     ==>False



生成器一定是迭代器,迭代器不一定是生成器。。


迭代对象(Iterable)对象转换成迭代器(Iterator)可使用iter()函数

isinstance(iter(‘abc‘),Iterator) ==>True
isinstance(iter([],Iterator)  ==> True

a = [1,2,3]

iter(a)

print(a)

===结果===<gen......


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

    Iterator甚至可以表示一个无限大的数据流,如全体自然数,而使用list是永远不可能存储全体自然数的。



小结:

    凡是可使用于ofr的对象都是Iterable类型

    凡是可用于next()函数的对象都是Iterator类型

    集合数据类型如list、dict、str等都是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象

Python的for循环本质上就是通过不断调用next()函数实现的,如:

for x in range(5)

    pass

实际上完全等价于

it = tier([0,1,2,3,4])

while True:

    try:

        x = next(i)

    except stopIteration:

        break





以上是关于python 迭代器的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在这个 python 片段中得到 float 是不可迭代的? [复制]

python:可迭代对象,迭代器,生成器函数,生成器的解析举例代码说明

python:可迭代对象,迭代器,生成器函数,生成器的解析举例代码说明

python学习之-迭代器

python中迭代器(转)

Python概念之装饰器迭代器生成器