迭代:是通过重复执行的代码处理相似的数据集的过程,并且本次迭代的处理数据要依赖上一次的结果继续往下做,上一次产生的结果为下一次产生结果的初始状态,如果中途有任何停顿,都不能算是迭代。例如:
(1)非迭代例子
loop = 0 while loop < 3: print("Hello world!") loop += 1
(2)迭代例子
loop = 0 while loop < 3: print(loop) loop += 1
例1仅是循环3次输出" Hello world!",输出的数据不依赖上一次的数据,因此不是跌代。
在python中通常用for …in遍历元组、列表、字典。而for … in后面需要那个可迭代对象。那么在python中什么是可迭代对象呢?
在python中
(1)可迭代对象(iterable),是指拥有了__iter__的内置方法的对象。
(2)迭代器(iterator) ,是指拥__iter__与__next__方法的对象。
在这里__iner__需要返回一个迭代器对象,__next__方法可以取出值,并停留到取值的位置,以便可取出下一个值。
在这里可以看出一个迭代器一定是一个可迭代对象,而一个可迭代对象不一定是迭代器。
在python中可以用isinstance(object,Iterable)判断对象是否为可迭代对象。用isinstance(object,Iterator)判断对象是否为迭代器。
In [1]: from collections import Iterable In [2]: from collections import Iterator In [3]: isinstance(1,Iterable) Out[3]: False In [4]: isinstance(1,Iterator) Out[4]: False In [5]: isinstance((1,2),Iterable) Out[5]: True In [6]: isinstance((1,2),Iterator) Out[6]: False
In [7]: class D(): ...: def __iter__(self): ...: pass ...: def __next__(self): ...: pass ...: In [8]: d = D() In [9]: isinstance(d,Iterator) Out[9]: True In [10]:
python实现迭代:列如,用迭代实现斐波那契数列:
class Fibonacci(object): def __init__(self,all_num): """初始化类属性""" #定义一个实例属性,存放要实现斐波那契数列的个数 self.all_num = all_num #定义count实例属性,作为迭代的退出条件判断 self.count = 0 #实现斐波那契数列定义a=0,b=1 self.a = 0 self.b = 1 def __iter__(self): """在这里self所指3对象本身是一个 迭代器,所以可以返回自身 """ return self def __next__(self): """ next,实现迭代返回结果 """ #判断输出的数列个数,是否小于需要的数列个数 if self.count < self.all_num: #rect最终要输出的斐波那契数列 rect = self.a #在这里重复让a=b,b=a+b,来实现斐波那契数列 self.a, self.b = self.b, self.a + self.b self.count += 1 return rect else: #当迭代遇到StopIteration异常时便会停止迭代 raise StopIteration fibonacci = Fibonacci(10) for fibo_num in fibonacci: print(fibo_num)
迭代:通过存储一种生成方式,而不是生成结果,来实现数据存储。从而极大的节约了存储空间。
注意:
在python2.x中 range()函数后面存的是一个列表,xrange()存的是一个可迭代对象。而在python3.x中range()存的是一个迭代对象,相当于python2.x中的xrange()。
众多python培训视频,尽在python学习网,欢迎在线学习!