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

列表解析式

  • 语法

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

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

生成器表达式

  • 语法

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

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

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

    • 计算方式

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

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

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

      • 可迭代对象
      • 迭代器

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

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

字典解析式

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

你可能感兴趣的:(Python 列表解析式 - 生成器表达式)