码迷,mamicode.com
首页 > 编程语言 > 详细

python 迭代器

时间:2017-01-02 00:11:53      阅读:223      评论:0      收藏:0      [点我收藏+]

标签: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 迭代器

原文地址:http://daring.blog.51cto.com/891785/1888173

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!