zoukankan      html  css  js  c++  java
  • python生成器

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

    所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

    创建一个生成器

    l = [ i*2 for i in range(10)]
    print(l) #[0, 2, 4, 6, 8, 10, 12, 14, 16, 18] 列表生成式
    G = (i*2 for i in range(10))
    print(G) #生成器
    

     创建Lg的区别仅在于最外层的[]()L是一个list,而g是一个generator。

    循环generator

    可以用for对generator遍历。

    for j in G:
        print(j)
    
    0
    2
    4
    6
    8
    10
    12
    14
    16
    18
    

     对于列表,我们可以在长度内任意取值,而生成器只有在循环到这一次了才有值。

    l = [ i*2 for i in range(10)]
    G = (i*2 for i in range(10))
    print(l[4]) #8
    print(G[4]) #TypeError: 'generator' object is not subscriptable
    

    generator中有一个next()方法可以直接使用。第一次使用返回第一个值,第二次使用返回第二个值,以此类推。这个是获取下一个值,generator中没有获取上一个值的方法。

    G = (i*2 for i in range(10))
    print(G.__next__()) #0
    print(G.__next__()) #2
    print(next(G)) #4
    print(next(G)) #6
    

    参考文档: 生成器---廖老师博客

  • 相关阅读:
    [转]OOA/OOD/OOP区别
    Get / Post
    1.PHP环境搭配
    6.WCF Rest
    消除关闭按钮时的IE弹出提示
    TSQL DML学习笔记
    javascript 中类的定义
    $().each() 与 $.each()区别,以及 jquery ajax 应用
    TSQL 数据库的创建
    删除用户表 存储过程 索引..
  • 原文地址:https://www.cnblogs.com/qing-chen/p/7267113.html
Copyright © 2011-2022 走看看