作家
登录

完全理解Python迭代对象、迭代器、生成器

作者: 来源: 2017-06-27 10:03:38 阅读 我要评论

  •  
  •              20 RETURN_VALUE  
  • 迭代器(iterator)

    那么什么迭代器呢?它是一个带状况的对象,他能在你调用next()办法的时刻返回容器中的下一?值,任何实现了__iter__和__next__()(python2中实现next())办法的对象都是迭代器,__iter__返回迭代器自身,__next__返回容器中的下一?值,如不雅容器中没有更多元素了,则抛出StopIteration异常,至于它们到底是若何实现的┞封并不重要。

    所以,迭代器就是实现了工厂模式的对象,它在你每次钠揭捉?问要下一?值的时刻给你返回。有很多关于迭代器的例子,比如itertools函数返回的都是迭代器对象。

    当运行代码:

    Fib既是一个可迭代对象(因为它实现了__iter__办法),又是一个迭代器(因为实现了__next__办法)。实例变量prev和curr用户保护迭代器内部的状况。每次调用next()办法的时刻做两件事:

    • 为下一次调用next()办法修改状况
    • 为当前此次调用生成返回结不雅

    生成无穷序列:

    1. >>> from itertools import count 
    2.  
    3. >>> counter = count(start=13) 
    4.  
    5. >>> next(counter) 
    6.  
    7. 13 
    8.  
    9. >>> next(counter) 
    10.  
    11. 14  

    年腋荷琐有限序列中生成无穷序列:

    1. >>> from itertools import cycle 
    2.  
    3. >>> colors = cycle(['red''white''blue']) 
    4.  
    5. >>> next(colors) 
    6.  
    7. 'red' 
    8.  
    9. >>> next(colors) 
    10.  
    11. 'white' 
    12.  
    13. >>> next(colors) 
    14.  
    15. 'blue' 
    16.  
    17. >>> next(colors) 
    18.  
    19. 'red'  

    大年夜无穷的序列中生成有限序列:

    1. >>> from itertools import islice 
    2.  
    3. >>> colors = cycle(['red''white''blue']) # infinite 
    4.  
    5. >>> limited = islice(colors, 0, 4) # finite 
    6.  
    7. >>> for x in limited: 
    8.  
    9. ... print(x) 
    10.  
    11. red 
    12.  
    13. white 
    14.  
    15. blue 
    16.  
    17. red  

    为了更直不雅地感触感染迭代器内部的履行过程,我们自定义一个迭代器,以斐波那契数列为例:

    1. class Fib: 
    2.  
    3.     def __init__(self): 

        推荐阅读

        9个实战及面试常用Shell脚本编写

      留意事项2)语法缩进,应用四个空格;多加注释解释。3)定名建议规矩:变量名大年夜写、局部变量小写,函数名小写,名字表现出实际感化。4)默认变量是全局的,在函数中变量local指定为局部变>>>详细阅读


      本文标题:完全理解Python迭代对象、迭代器、生成器

      地址:http://www.17bianji.com/lsqh/35917.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)