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

 

posted @ 2022-06-23 23:09  zed99  阅读(143)  评论(0编辑  收藏  举报