python之生成器generator

生成器

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

 

# Author: xueyou

def fib(max):
    n,a,b = 0,0,1
    while n < max:
#        print(b)
        yield b # 保存当前状态,然后返回,下次进来从这里开始
        a,b = b,a+b  # t(a,a+b) a=t(0) b=t(1) t是一个tuple
        n += 1

f = fib(10) # 生成器只有一种方法就是next ,正常的时候是不用的,平时使用for循环来进行 
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
for i in range(6):
    print(f.__next__())

 

posted on 2018-03-14 22:30  杨学友  阅读(111)  评论(0)    收藏  举报

导航