美文网首页
Python 列表解析式 - 生成器表达式

Python 列表解析式 - 生成器表达式

作者: __RY__ | 来源:发表于2018-08-17 11:23 被阅读22次

    列表解析式

    • 语法

      • [ 返回值 for 元素 in 可迭代对象 if 条件 ]
      • 使用中括号[],内部是for循环,if 条件语句可选
      • 返回一个新的列表
    • 列表解析式是一种语法糖

      • 编译器会优化,不会因为简写而简写影响效率,反而因优化提高了效率
      • 减少程序员工作量,减少出错
      • 简化了代码,但可读性增强

    生成器表达式

    • 语法

      • ( 返回值 for 元素 in 可迭代对象 if 条件 )
      • 列表解析式的中括号换成小括号()就行了
      • 返回一个生成器
    • 和列表解析式的区别

      • 生成器表达式是按需求计算(或称惰性求值、延迟计算),需要的时候才计算值

      • 列表解析式是立即返回值

      • 计算方式

        • 生成器(延迟计算、返回迭代器、从前到后走完一遍,不能回头)
        • 列表解析式(立即计算、返回的不是迭代器,返回可迭代对象列表,从前到后走完一遍后,可以重新回头迭代)
      • 内存占用

        • 单从返回值本身来说,生成器表达式省内存,列表解析式返回新的列表
        • 生成器没有数据,内存占用极少,但是使用的时候,虽然一个个返回数据,但是合起来占用的内存也差不多
        • 列表解析式构造新的列表需要占用内存
      • 计算速度

        • 单看计算时间,生成器表达式耗时非常短,列表解析式耗时长
        • 但是生成器本身并没有返回任何值,只返回了一个生成器对象
        • 列表解析式构造并返回了一个新的列表
      • 生成器

        • 可迭代对象
        • 迭代器

    生成器和迭代器是不同的对象,但是都是可迭代对象!!!

    集合解析式类似列表解析式,使用花括号{}即可

    字典解析式

    • {返回值 for 元素 in 可迭代对象 if 条件}
    • 列表解析式的中括号换成大括号{}即可
    • 使用key.value形式
    • 立即返回一个字典

    相关文章

      网友评论

          本文标题:Python 列表解析式 - 生成器表达式

          本文链接:https://www.haomeiwen.com/subject/mryzbftx.html