疑问?通过列表生成式,可以直接创建一个列表。
所有的数据都会存到内存中,受内存的限制,列表的容量是有限制的,如果列表中有10000个数据,如果我们只需访问前几个元素,后面的基本不会访问,那么造成内存极大的浪费。
如果列表中的元素可以按照某种算法推导出来,那么我们在循环遍历列表时不断的退到后面的元素,从而节省大量内存。这种一边循环一边推导的机制称为生成器(generator)
# 创建生成器
1.讲列表生成式[] 改为 () 即可:
g = (x*x for x in range(1,3))
print(type(g)) # <class 'generator'>
print(g) # 对象
# 特点:可以通过next() 函数过得generator的下一个值
print(next(g)) # 1
print(next(g)) # 4
print(next(g)) # 报错StopIteration异常
# 改进,如果数据有10000万个也需要一直写next吗?
for i in g:
print(i)
使用循环优点:不需要重复写,同时不会报错了
原理:生成器generator保存的是算法,每次调用next()就计算生成器下一个元素的值,直到抛出StopIteration错误为止。
网友评论