Python迭代器

来源:互联网 发布:用python写小游戏 编辑:程序博客网 时间:2024/05/22 05:17
#author F#迭代器#可直接作用于for循环的数据结构有: str,list,dict,set,tuple(元组),generate#这些可直接作用于for循环的对象统称为可迭代对象Iterable#判断一个对象是否是可迭代 可循环的 : isinstance()from collections import Iterableprint(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 Iteratorprint(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]:    passit = iter([1,2,3,4,5])while True:    try:        #获得下一个值        next(it)    except StopIteration:        #遇到StopIteration就退出        break