浅谈Python中列表生成式和生成器的区别

yipeiwu_com6年前Python基础

列表生成式语法:

[x*x for x in range(0,10)] //列表生成式,这里是中括号
//结果 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
(x*x for x in range(0,10)) //生成器, 这里是小括号
//结果 <generator object <genexpr> at 0x7f0b072e6140>

二者的区别很明显:
一个直接返回了表达式的结果列表, 而另一个是一个对象,该对象包含了对表达式结果的计算引用, 通过循环可以直接输出

g = (x*x for x in range(0,10))
for n in g:
  print n

结果

0
1
4
9
16
25
36
49
64
81

    当表达式的结果数量较少的时候, 使用列表生成式还好, 一旦数量级过大, 那么列表生成式就会占用很大的内存,
    而生成器并不是立即把结果写入内存, 而是保存的一种计算方式, 通过不断的获取, 可以获取到相应的位置的值,所以占用的内存仅仅是对计算对象的保存


相关文章

Python实时获取cmd的输出

最近发现一个问题,一个小伙儿写的console程序不够健壮,监听SOCKET的时候容易崩,造成程序的整体奔溃,无奈他没有找到问题的解决办法,一直解决不了,可是这又是一个监控程序,还是比较...

Python实现截取PDF文件中的几页代码实例

截取PDF文件中的几页有很多做法。 1. 把文件用Google的Chrome浏览器打开,打印其中几页,另存为PDF。简单。 2. 安装Adobe的Acrobat,里面会有更全的功能。然而...

Python argparse模块应用实例解析

这篇文章主要介绍了Python argparse模块应用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 简介 argpars...

Tesserocr库的正确安装方式

Tesserocr库的正确安装方式

win10,直接使用 pip install tesserocr 的命令 如果输出如下错误提示: tesserocr.cpp(596): fatal error C1083: 无法打...

Python hashlib模块加密过程解析

这篇文章主要介绍了Python hashlib模块加密过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 hashlib模块  ...