zoukankan      html  css  js  c++  java
  • 生成器是什么

    通过列表生成器,我们可以直接创建一个列表,但是由于受到内存限制,列表容量肯定是有限的,而且,创建一个包含100万个元素的列表,不仅占用很大的储存空间,如果我们仅仅需要访问前面几个元素的话,后面元素占用的空间都白白浪费了。

    所以,如果列表元素可以按照某种算法推算出来,那么我们是否可以在循环的过程中不断推算出后续的元素?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,叫做生成器:generator,要创建一个generator,有很多种方法,第一种方法很简单,只要把一个列表生成式的[]改为()即可,这样就创建了一个generator,只有在调用的时候,才会形成相应的数据。

    列表的生成:

    a = [i*2 for i in range(10)]

    print(a)

    这是列表的生成,print的结果是,0,2,4,6......16,18

    生成器:

    b = (i*2 for i in range(10))

    for i in b:

         print(i)

    这就是一个生成器。他等价于下面一串代码:

    b = []

    for i in range(10)

         b.append(i*2)

    print(b)

    注意如果:

    b = (i*2 for i in range(10))

    print(b)

    print(type(b))

    我们就会发现,第一个print出来的是b这个生成器的内存地址

    而第二个会print出来<class 'generator'>

  • 相关阅读:
    [Effective JavaScript 笔记]第54条:将undefined看做“没有值”
    [Effective JavaScript 笔记]第53条:保持一致的约定
    UDP打洞原理介绍
    Uboot启动分析之Start.S
    MMU
    linux_shell
    SSH2配置
    线程同步
    C#线程基础
    客户端服务器通讯常用的一种方法——Marshal类
  • 原文地址:https://www.cnblogs.com/zaizaiaipython/p/7820454.html
Copyright © 2011-2022 走看看