generator与list比较
- generator:算法实现下一个数据的输出,不调用下一个,就不执行下一个数据的运算
- list:直接存储于内存,所有数据都同时存在
- generator相较于list占用内存小
创建一个简单的generator
- 简单的generator的创建:在列表生成式的基础上将[]改为()
例如:
g=(x*x for x in range(10))
- generator的调用
>>> g=(x*x for x in range(10))
>>> g
at 0x0610BC00>
>>> 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
next(g)
StopIteration
>>> def g_get():
for n in g:
print(n)
>>> g=(x*x for x in range(10))
>>> g_get()
0
1
4
9
16
25
36
49
64
81
创建一个函数形式的generator
- 函数型的generator的创建:
与普通函数不同的是含有关键字yield,即含有yield的函数就是generator
>>> def yhsj():
L=[1]
while True:
yield L
L=[1]+[L[i]+L[i+1] for i in range(len(L)-1)]+[1]
>>> def get_yhsj():
for n in yhsj():
print(n)
>>> get_yhsj()
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
[1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1]
...
函数型的generator与普通函数的不同
- 除了含有yield关键字外,还有就是执行顺序不同,普通函数的执行是按顺序的,而generator是执行到yield语句就停止,知道下一次调用,执行接下来的语句