简要引入:
迭代一词,我们再熟悉不过了,它经常出现在算法中,在数学中也有很多的使用,比如一个算法经过多少次的迭代,执行的效率有了很大的提高……
迭代的意思类似于循环,每一次重复的过程被称为一次迭代的过程,而每一次迭代出现的结果将作为下一次迭代的初始值。迭代器:提供迭代方法的容器。
如:序列(列表、元祖、字符串),字典
练习1
#for循环来进行迭代In [2]: for i in "Python": ...: print(i) ...: P y t h o n
注:
字符串是一个容器,也是一个迭代器,for语句能使得迭代器的功能以输出到控制台的方式实现,每一次从此容器中依次取出一个数据,这就是迭代操作。(字典、文件同样支持迭代)
练习2
In [2]: dic1 = {'name':'xiaodong','sex':'male','love_language':'Python','love_quotes':'Life is short. You need Python.'} In [3]: for dic in dic1: ...: print('%s ---- %s'%(dic, dic1[dic]))#%s字符串格式化的一种 ...: name ---- xiaodong sex ---- male love_language ---- Python love_quotes ---- Life is short. You need Python.
python中关于迭代器的2个BIF(Built-in Functions,内置函数)
iter() -----调用iter()得到与之对应的迭代器
next() -----调用此方法,迭代器返回下一个值
StopIteration异常:迭代器没有值返回时,Python会抛出此异常,结束操作
练习3
In [4]: str1 = "Python"In [5]: iter1 = iter(str1) In [6]: next(iter1) Out[6]: 'P'In [7]: next(iter1) Out[7]: 'y'In [8]: next(iter1) Out[8]: 't'In [9]: next(iter1) Out[9]: 'h'In [10]: next(iter1) Out[10]: 'o'In [11]: next(iter1) Out[11]: 'n'#最后抛出异常结束如下所示:In [12]: next(iter1) --------------------------------------------------------------------------- StopIteration Traceback (most recent call last) <ipython-input-12-b262f28c3c80> in <module>() ----> 1 next(iter1) StopIteration:
原理如下:
In [13]: str1 = "Python"In [14]: iter1 = iter(str1) In [15]: while True: ...: try: ...: each = next(iter1) ...: except StopIteration: ...: break ...: print(each) ...: P y t h o n
方法实现
__iter()__
__next()__
迭代器必须实现
__iter__()
的方法,因为通过此方法才能返回迭代器本身。除此之外,还需要重写__next__()
方法,用此方法可以使得迭代器按照我们自己定义的规则进行迭代。
斐波那契数列
In [1]: class Fibonacci: ...: def __init__(self,n = 10):#n=10是一个范围 ...: self.a = 0 ...: self.b = 1 ...: self.n = n ...: def __iter__(self): #返回迭代器本身 ...: return self ...: def __next__(self): ...: self.a, self.b = self.b, self.a + self.b ...: if self.a > self.n: #判断是否还有下一个输出,如果没有则抛出异常 ...: raise StopIteration ...: return self.a In [2]: fibonaccis = Fibonacci()#类的实例化In [3]: for fibonacci in fibonaccis: #迭代生成此数列 ...: print(fibonacci,end=' ') #end=' '可以理解为循环打印时不换行,以空格分开 ...: 1 1 2 3 5 8
作者:日尧_dong
链接:https://www.jianshu.com/p/fd4a3348ea8c