Python迭代器

#author F

#迭代器
#可直接作用于for循环的数据结构有: str,list,dict,set,tuple(元组),generate
#这些可直接作用于for循环的对象统称为可迭代对象Iterable
#判断一个对象是否是可迭代 可循环的 : isinstance()

from collections import Iterable
print(isinstance([], Iterable))
print(isinstance((), Iterable))
print(isinstance('abc', Iterable))
print(isinstance((2*i for i in range(10)), Iterable))
print(isinstance(100, Iterable))
print()

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

from collections import Iterator
print(isinstance([], Iterator))
print(isinstance((), Iterator))
print(isinstance('abc', Iterator))
print(isinstance((2*i for i in range(10)), Iterator))
print(isinstance(100, Iterator))

#生成器都是迭代器 list,dict,str是可迭代对象但不是迭代器  iter()函数可以将可迭代对象变为迭代器
print(isinstance(iter([]), Iterator))
print(isinstance(iter(()), Iterator))
print(isinstance(iter('abc'), Iterator))
print(isinstance((2*i for i in range(10)), Iterator))
# print(isinstance(iter(100), Iterator)) #报错

#迭代器的计算是惰性的 只有在需要下一个数据时才会返回 ->惰性运算
#Iterator甚至可以表示一个无限大的数据流  例如全体自然数 而list 是永远不可能存储全体自然数
#python3.0里range(10)本身就是一个迭代器对象
#python2.0里xrange(10)才是一个迭代器对象
for i in [1,2,3,4,5]:
    pass

it = iter([1,2,3,4,5])
while True:
    try:
        #获得下一个值
        next(it)
    except StopIteration:
        #遇到StopIteration就退出
        break

 

posted @ 2017-06-19 11:32  Bird_getUpEarly  阅读(170)  评论(0编辑  收藏  举报