使用生成器表达式来改写数据量比较大列表推导
Roy Lv7

generator expression

列表推导的缺点是:在推导过程中,对于输入序列的每个值都要创建仅含一项元素的全新列表。如果数据量较大会消耗大量内存,导致程序崩溃。

推导代码:

1
2
value = [len(x) for x in open('\file.txt')]
print(value)

为了解决此问题Python提供了生成器表达式(generator expression),它是对列表推导和生成器的一种泛化(generalization)。生成器表达式在运行的时候并不会把整个输出序列都呈现出来,而是会估值为迭代器(iterator),这个迭代器每次可以根据生成器表达式产生一项数据。

生成器表达式

把实现列表推导式所用的写法放入一对圆括号中,就构成了生成器表达式。

1
2
3
it = (len(x) for x in open('\file.txt'))
print(it)
print(next(it))

生成器表达式组合

1
2
3
it = (len(x) for x in open('\file.txt'))
roots = ((x,x**0.5) for x in it)
print(next(roots))

外围的迭代器每次前进时,都会推动内部的迭代器。

组合的表达式速度会很快

二者区别

生成器表达式求值时,它会立刻返回一个迭代器,而不会深入处理文件中的内容。

  • 本文标题:使用生成器表达式来改写数据量比较大列表推导
  • 本文作者:Roy
  • 创建时间:2020-04-17 13:33:27
  • 本文链接:https://www.yrzdm.com/2020/04/17/generator-expression/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!