python生成式与生成器
生成式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。
比如你要生成一个[ 1x1, 2x2, 3x3, ..., 10x10 ] 的列表,不用生成式的方法:
L = []
for x in range(1,11):
L.append(x)
print(L)
---------------------------------------
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
使用生成式方法:
L = [ i*i for i in range(1,11) ]
集合、字典的生成式方法都只是括号的不同,使用方法一样。
需要注意的是元组的生成式方法:
(expression for item in Sequence )
其返回值是一个生成器对象。
>>> a = (x for x in range(1,10))
>>> a
<generator object <genexpr> at 0x7faf6ee20a50> # 返回的是生成器对象
>>> tuple(a) # 使用 tuple() 函数,可以直接将生成器对象转换成元组
(1, 2, 3, 4, 5, 6, 7, 8, 9)
生成器和生成式的区别:
生成式是一次性将符合判断条件的所有元素输出至列表;而生成器则是根据需求,在调用时再推算后续的元素,不必创建完整的List,节省大量的空间。 而生成器(generator)的名称也是由其 一边循环一边计算的机制得来的。
可以通过next()函数来取得generator中的下一个返回值
g = (x * x for x in range(10))
print(type(g))
print(next(g))
print(next(g))
print(next(g))
----------------------------------------------
<class 'generator'>
0
1
4
一般使用生成器 用for循环来取得其中的值。
>>> g = (x * x for x in range(10))
>>> for n in g:
... print(n)
...
0
1
4
9
16
25
36
49
64
81