• 零基础学python-19.8 生成器表达式:当迭代器遇上列表解析


    这一章节我们来讨论一下生成器表达式。

    从语法上来讲,生成器表达式跟列表解析一个样,只不过列表解析放在中括号里面,而生成器表达式放在小括号里面

    >>> [x for x in range(5)]
    [0, 1, 2, 3, 4]
    >>> (x for x in range(5))
    <generator object <genexpr> at 0x01E5F3A0>
    >>> list(x for x in range(5))
    [0, 1, 2, 3, 4]
    >>> 


    从上面的代码可以看见,小括号返回的是一个生成器,要使用list函数才能解析里面的内容。

    说白了,从结果上面来看,其实列表解析就是在使用list函数迫使生成器一次性生成所有结果。

    >>> g=(x for x in range(5))
    >>> next(g)
    0
    >>> next(g)
    1
    >>> 
    >>> [x for x in range(5)]
    [0, 1, 2, 3, 4]



    从执行上面来看,列表解析一次性在内存里面构建所有的结果,而生成器表达式只不过返回一个对象,而且这个对象支持迭代协议,只要在迭代环境当中都可以操作。

    >>> g=(x for x in range(5))
    >>> for item in g:
    	print(item)
    
    	
    0
    1
    2
    3
    4
    >>> 


    例如我们可以通过for来得到生成器里面的对象的值。

    >>> g=(x for x in range(5))
    >>> list(map(lambda x :x**2,g))
    [0, 1, 4, 9, 16]
    >>> 
    >>> g=(x for x in range(5))
    >>> list(filter(lambda x:x%2==0,g))
    [0, 2, 4]
    >>> 
    >>> g=(x for x in range(5))
    >>> list(sorted(g,reverse=True))
    [4, 3, 2, 1, 0]
    >>> 



    又如上面的代码,可以在map、filter和sorted等支持迭代协议的环境中,都可以支持对象的操作。

    总结:这一章节主要说明了生成器与列表解析之间的关系,以及生成器支持迭代协议,可以在迭代环境中对其中的对象进行操作。

    这一章节就说到这里,谢谢大家

    ------------------------------------------------------------------

    点击跳转零基础学python-目录

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    如何在Macbook中查看并删除最近下载的文件?
    如何在Mac Safari浏览器中显示完整网站地址?
    如何在Mac上的 FaceTime 通话中共享环境声音
    如何在 Lightroom 中使用边界变形保留完整视图?
    新款MacBook Air曝光:M2处理器,刘海屏
    find找到文件并且替换
    Echarts设置Y轴单位
    Linux机器I/O分析
    Linux初始化需要做什么
    Linux查看某个文件或目录是否正在使用
  • 原文地址:https://www.cnblogs.com/raylee2007/p/4896712.html
Copyright © 2020-2023  润新知