在编程中,我们有时需要生成一个列表,但是该列表可能占据大量的内存,此时列表直接加载到内存中就不再可取了,python提供一个列表生成器,列表生成器是一段生成对应列表的算法。
列表生成器每一次迭代 生成器产生的对应的数会被回收。
列表生成器的两种写法:
1. 将列表的[]改成()
下面是一个列表
a=[x for x in range(100)]
print(type(a))
查看类型结果是
<class 'list'>
将[ ]改成( )a = (x for x in range(100))
print(a)
结果是a在内存的地址
<generator object <genexpr> at 0x0000020890C8AD00>
遍历可以查看a的所有值,但当你将a的所有值遍历一遍后,a对应的列表就会被销毁。
for i in a:
print(i)
除了用遍历查看a的值外,还可以用next( a )来查看a的值,next( a )查看a的值每次只能查看一个,从0开始,到99结束,当再次执行next( a )时返回stoplteration。
print(next(a))
2. 将函数转化为列表生长器 yield
def Fib(num):
index = 0
i,j=1,2
while index< num:
yield i
i,j=j,i+j
index+=1
print(Fib(8))
返回结果是
<generator object Fib at 0x0000019B2F7AAD58>
在一个函数中,遇到yeild直接返回,和return类似,再次执行函数,则程序从停止的地方继续执行,然后遇到到yeild再次被打断,往复循环。