Python——生成器(1)

一个普通的函数调用一般是这样的,从第一行代码开始执行,直到最后一行代码结束(中间有可能会遇到return,异常等会提前结束)。对于我们而言,这是一个再正常不过的函数标准执行流程,它只能返回一个至或者隐式的返回None。不过,有时可以创建能产生一个序列的函数还是有帮助的。例如,通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,拥有这种能力的“函数”被称为生成器(generator )

  • 创建生成器
  1. 只要把一个列表生成式的[]改成(),就创建了一个generator
    >>> g = (x * x for x in range(10))
    >>> g
    <generator object <genexpr> at 0x1022ef630>

  2. 任何包含yield语句的函数

     def flatten(nested):
      for sublist in nested:
           for element in sublist
                 yield element 
    

这篇主要简单介绍了下生成器以及怎么创建生成器的两种方法,接下来的系列会让大家对生成器有更深的了解以及它的作用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容