生成器
通过列表生成器,我们可以直接创建一个列表,但是,受到内存限制,列表容量是有限的。
所以,如果列表元素可以按某种算法推出,那我们是否可以在循环过程中不断推出后续元素呢?这样就不必创建完整的list,从而节省大量内存空间,在python中,这种一边计算的机制,称为生成器:generator:
要创建一个列表
生成器只有一个__next__()方法,只记录当前数据,不能返回上一个数据
我们创建一个generator后,基本上不会调用next()函数,而是通过for循环来迭代它,并且不需要关心StopIteration错误
如斐波那契数列Fibonacci:
1,1,2,3,5,8.。。。。
斐波那契数列不能用列表生成式写出,但用函数却很容易打印出来
"""
生成器
"""
def fib(max):
n,a,b=0,0,1
while n<max:
print(b)
a,b=b,a+b
n+=1
return "done"
注意此处的 a,b=b,a+b
意思是: t=(a,a+b)
a=t[0]. b=t[1]
将上述的函数变为生成器只有一步之遥,只需把print(b)改为:yield b
"""
生成器
"""
def fib(max):
n,a,b=0,0,1
while n<max:
#print(b)
yield b
a,b=b,a+b
n+=1
return "done"
fib_generator=fib(100)
print(fib_generator.__next__())
print(fib_generator.__next__())
print(fib_generator.__next__())
print(fib_generator.__next__())
运行结果:
/Library/Frameworks/Python.framework/Versions/3.7/bin/python3 /Users/li/Desktop/pythonproject/day01列表.py
1
1
2
3
Process finished with exit code 0
dadsa