迭代器
迭代器
什么是迭代器:
迭代器可以让我们访问集合的时候变得非常方便。我们通过for...in...
的方式访问一个集合的时候,就是使用迭代器完成的。如果没有迭代器,那么我们只能通过while
循环,每次循环的时候通过下标访问了。
可迭代的对象:
可以直接使用for
循环遍历的对象,成为可迭代的对象,常见的可迭代的对象有:list
、tuple
、dict
、set
、str
以及生成器。
更加专业的判断一个对象是否是可迭代的对象是:这个对象有一个__iter__
方法,并且这个方法会返回一个迭代器对象,这种对象就叫做可迭代的对象。
判断一个对象是否可迭代:
可以使用isinstance()
判断一个对象是否是Iterable
的对象:
from collections import Iterable # 列表是一个可迭代的对象 ret = isinstance([1,2,3],Iterable) print(ret) # 字符串是一个可迭代的对象 ret = isinstance("abc",Iterable) print(ret) # 整形不是一个可迭代的对象 ret = isinstance(123,Iterable) print(ret)
迭代器:
- 在
Python2
中,实现了next
方法和__iter\__方法,并且在这个方法中返回了值的对象,叫做迭代器对象。 - 在
Python3
中,实现了__next__
方法和方法__iter__
方法,并且这个方法返回了值的对象,叫做迭代器对象。 - 如果迭代器没有返回值了,那么应该在
next
或者是__next__
方法中抛出一个StopIteration
异常。
使用iter()
方法获取可迭代对象的迭代器:
有时候我们拥有了一个可迭代的对象,我们想要获取这个迭代器,那么可以通过iter(x)
方法获取这个可迭代对象的迭代器。
自定义迭代器:
class MyRangeIterator(object): """ 迭代器 """ def __init__(self,start,end): self.index = start self.end = end def __next__(self): if self.index < self.end: index = self.index self.index += 1 return index else: raise StopIteration() class MyRange(object): """ 可迭代对象 """ def __init__(self,start,end): self.start = start self.end = end def __iter__(self): return MyRangeIterator(self.start,self.end) # 初始化一个可迭代的对象 for x in MyRange(1,10): print(x) # 使用itre函数将可迭代的对象转换为迭代器 range_iterator = iter(MyRange(1,10)) # 不能遍历迭代器,只能通过next来迭代 for x in range_iterator: print(x)