在Python中,这种一边循环一边计算的机制,称为生成器:generator。
列表式生成的list一次生成完成,如果列表有大量的元素会占用大量的内存空间,可以把生成列表的"[]"改为"()",就创建了一个generator。
列表生成式:[x * x for x in range(10)]
创建generator:g = (x * x for x in range(10))
>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
at 0x1022ef630>
L是一个listg是一个generator
可以使用next()函数从生成器中一个一个取值
>>> next(g)
0
>>> next(g)
1
>>> next(g)
4
>>> next(g)
9
>>> next(g)
16
>>> next(g)
25
>>> next(g)
36
>>> next(g)
49
>>> next(g)
64
>>> next(g)
81
>>> next(g)
Traceback (most recent call last):
File "", line 1, in
StopIteration
generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。
使用next()函数取值不友好,超出范围还会抛出Stoplteration的错误,所以一般会使用for循环取值,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
复杂的生成器使用列表生成式无法实现的时候,可以使用函数来实现,函数中定义关键字yield ,该关键字表示该函数为generator 函数。
yield 关键字的generator 函数待补充
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)