作家
登录

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

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

  •  
  •         self.prev = 0 
  •  
  •         self.curr = 1 
  •  
  •   
  •  
  •     def __iter__(self): 
  •  
  •         return self 
  •  
  •   
  •  
  •     def __next__(self): 
  •  
  •         value = self.curr 
  •  
  •         self.curr += self.prev 
  •  
  •         self.prev = value 
  •  
  •         return value 
  •  
  •   
  •  
  • >>> f = Fib() 
  •  
  • >>> list(islice(f, 0, 10)) 
  •  
  • [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]  
  • 迭代器就像一个懒加载的工厂,比及有人须要的时刻才给它生成值返回,没调用的时刻就处于休眠状况等待下一次调用。

    生成器(generator)

    1. def something(): 
    2.  
    3.     result = [] 
    4.  
    5.     for ... in ...: 
    6.  
    7.         result.append(x) 
    8.  
    9.     return result  

    生成器算得上是Python说话中最吸惹人的特点之一,生成器其实是一种特别的迭代器,不过这种迭代器加倍优雅。它不须要再像膳绫擎的类一样写__iter__()和__next__()办法了,只须要一个yiled关键字。 生成器必定是迭代器(反之不成立),是以任何生成器也是以一种懒加载的模式生成值。用生成器来实现斐波那契数列的例子是:

    1. def fib(): 
    2.  
    3.     prev, curr = 0, 1 
    4.  
    5.     while True
    6.  
    7.         yield curr 
    8.  
    9.         prev, curr = curr, curr + prev 
    10.  
    11.   
    12.  
    13. >>> f = fib() 
    14.  
    15. >>> list(islice(f, 0, 10)) 
    16.  
    17. [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]  

    fib就是一个通俗的python函数,它特别的处地点于函数体中没有return关键字,函数的返回值是一个生成器对象。当履行f=fib()返回的是一个生成器对象,此时函数体中的代码并不会履行,只有显示或隐示地调用next的时刻才会真正履行琅绫擎的代码。

    生成器在Python中是一个异常强大年夜的编程构造,可以用更少地中心变量写流式代码,此外,比拟其它容器对象它更能节俭内存和CPU,当然它可以用更少的代率攀来实现类似的功能。如今就可以着手重构你的代码了,但凡看到类似:

    1. def iter_something(): 
    2.  
    3. for ... in ...: 

        推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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