迭代:类似于循环,每一次重复的过程被称为一次迭代的过程,而每一次迭代得到的结果会被用来作为
下一次迭代的初始值,提供迭代方法的容器称为迭代器,通常接触的迭代器有序列(列表、元组、字符串),
还有字典也是迭代器,都支持迭代的操作。
关于迭代,python提供了两个BIF:iter(), next()
对一个容器对象调用iter()就得到它的迭代器,调用next()迭代器就会返回下一个值,如果迭代器没有值可以返回了,
python就会抛出StopIteration的异常。
关于实现迭代器的魔法方法有两个:__iter__() , __next__()
一个容器如果是迭代器,那就必须实现__iter__()魔法方法,这个方法实际上是返回迭代器本身,接下来重点是要实现
__next__()魔法方法,因为它决定了迭代的规则。
class MyIterator: #创建一个迭代器
def __init__(self,x=2,xmax=100): #构造函数
self.__mul,self.__x = x,x
self.__xmax=xmax
def __iter__(self): #迭代器的协议方法
return self #返回的是类本身
def __next__(self):
if self.__x:
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)
迭代的元素为: 4
迭代的元素为: 8
迭代的元素为: 16
迭代的元素为: 32
迭代的元素为: 64
[Finished in 0.4s]
利用iter函数定义迭代器:
class Counter:
def __init__(self,x=0):
self.x=x
counter=Counter()
def used_iter():
counter.x+=2
return counter.x
for i in iter(used_iter,8):
print('本次遍历的数值:',i)
本次遍历的数值: 2
本次遍历的数值: 4
本次遍历的数值: 6
[Finished in 0.3s]