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