美文网首页生活不易 我用pythonpython加油站Pythoner集中营
python中的迭代器(以斐波那契数列为主讲解)

python中的迭代器(以斐波那契数列为主讲解)

作者: panxd | 来源:发表于2017-06-24 13:43 被阅读0次
    • 简要引入:
      迭代一词,我们再熟悉不过了,它经常出现在算法中,在数学中也有很多的使用,比如一个算法经过多少次的迭代,执行的效率有了很大的提高……
      迭代的意思类似于循环,每一次重复的过程被称为一次迭代的过程,而每一次迭代出现的结果将作为下一次迭代的初始值。
    • 迭代器:提供迭代方法的容器。
      如: 序列(列表、元祖、字符串),字典
    练习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 
    

    相关文章

      网友评论

        本文标题:python中的迭代器(以斐波那契数列为主讲解)

        本文链接:https://www.haomeiwen.com/subject/pefkcxtx.html