迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。迭代是Python强大的功能之一,是访问集合元素的一种方式。迭代器是一个可以记住遍历位置的对象,在遍历字符串,列表或元组对象时非常有用。
一、迭代器
1、什么是可迭代对象
如果给定一个list或tuple,可以通过for循环来遍历这个list或tuple,这种遍历称为迭代(Iteration),被遍历的list或tuple被称为可迭代对象。除了list或tuple外,还有很多可以被迭代的对象,如str、set、tuple等。
>>> x = [100, 200, 300] >>> y = iter(x) >>> z = iter(x) >>> next(y) >>> next(y) >>> next(z) >>> next(z) >>> type(x) >>> type(y)
运行结果如下所示

这里x是一个可迭代对象,可迭代对象并不是指某种具体的数据类型,list是可迭代对象,dict是可迭代对象,set也是可迭代对象。y和x是两个独立的迭代器,迭代器内部有一个状态,改状态用于记录当前迭代所在的位置,以便下次迭代式获取正确的元素。
在python中,迭代使用过for...in来完成的。例如:
for a in bb:
print(a, end="")
2、什么是迭代器
迭代器是一个可以记住遍历位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器有两个基本的方法:iter()和next()。其中,iter()方法用于创建迭代器对象:next()用于遍历对象的元素。在遍历字符串,列表或元组对象时经常会用到迭代器。例如:
>>> lis = ["苹果", "香蕉", "橘子", "桃子"] >>> aa = iter(lis) >>> next(aa) >>> next(aa) >>> next(aa) >>> next(aa) >>> next(aa) #超出遍历的范围时会报错
运行结果如下图所示

迭代器智能向前遍历元素,不能后退。
迭代器对象可以使用常规的for语句或while语句进行遍历。例如:
>>> lis = ["香蕉", "橘子", "苹果", "桃子"]
>>> bb= iter(lis)
>>> for a in bb:
print(a, end="")
>>>香蕉 橘子 苹果 桃子
3、自定义迭代器
通过定义一个实现迭代器协议方法的类,即可自定义一个迭代器。
class MyIterator:
def __init__(self, x=3, xmax=300):
self.__mul,self.__x = x, x
self.__xmax = xmax
def __iter__(self):
return self
def __next__(self):
if self.__x and self.__x != 1:
self.__mul *= self.__x
if self.__mul <= self.__xmax:
return self.__mul
else:
raise StopIteration
else:
raise StopIteration
if __name__ == '__main__':
myiter = MyIterator()
for i in myiter:
print("迭代的数据元素为:",i)
