列表生成式语法:
1
2
3
4
|
[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 >
|
二者的区别很明显:
一个直接返回了表达式的结果列表, 而另一个是一个对象,该对象包含了对表达式结果的计算引用, 通过循环可以直接输出
1
2
3
|
g = (x * x for x in range ( 0 , 10 ))
for n in g:
print n
|
结果
1
2
3
4
5
6
7
8
9
10
|
0
1
4
9
16
25
36
49
64
81
|
当表达式的结果数量较少的时候, 使用列表生成式还好, 一旦数量级过大, 那么列表生成式就会占用很大的内存,
而生成器并不是立即把结果写入内存, 而是保存的一种计算方式, 通过不断的获取, 可以获取到相应的位置的值,所以占用的内存仅仅是对计算对象的保存