Generator (work in progress)

generator

# 列表生成式
a=[ i*2 for i in range(22) ] #这个是列表 会在内存存储
b=(i*2 for i in range(22))   #这个就是generator 没有在内存中储存, 当使用时只记录当前值,之前之后的值会删除
print(b.__next__()) #只有一个__next__()方法, 取下一个值同时删除上个值。 没有取上一个值的方法
print(a)
print(i*i for i in range(10))
# 斐波那契数列, 除了第一个第二个数之外,任意的一个数都可以由前两个数相加得到
# 112358132134
# a,b=b,a+b
# a=1
# b=2
# t=(b,a+b)=(2,3) 
# a=t[0]=2#t tuple这样的
# b=t[1]=3

def fib(max):  
    n,a,b=0,0,1
    while n<max:
        yield b #这边改为yield就变为了生成器 这边将print改为yield就变成了生成器
        a,b=b,a+b #a=b b=a+b 相当于把a往后挪了一位
        n=n+1 #就是计数器
    return 'done done done '
print(fib(5)) #这个函数就是generater
generator=fib(10)
while True:
    try:
        next(generator) #generator.__next__()
        print(next(generator))
    except StopIteration as e:
        print('generator return value', e.value)
        break
    else:
        pass
    finally:
        pass
print(generator.__next__())
print(generator.__next__())
print(generator.__next__())
print(generator.__next__())
# print(next(fib(10))) 用next函数一样的  


#生成器的最终解释就是 会记录当前的值 然后可以中断 之后可以返回这个值继续执行
Ethan Zhaogenerator