斐波那契
斐波那契:
def fib(max):
n,a,b=0,0,1
while n<max:
a,b=b,a+b
print(b)
n+=1
fib(31)
斐波那契生成器:
def fib(max):
n,a,b=0,0,1
while n < max:
print('老王') #在第一次执行并不会被打印出来 它只是查到这是一个 生成器对象 当第二次执行调用才会执行
a,b=b,a+b
print(b) # 在第二次调用才会执行
yield b #yield 是把这个函数变成生成器 这时return 无效 它用来冻结到当前代码 它会直接返回给外边的 next(t) 打印它next(t)才出一个结果 必须再一次next 才能唤醒
n=n+1
return 'down'
t = fib(14) #这一步只是生成斐波那契 并不会执行 只是生成生成器器对象
方案一:
next(t)
方案二:
for i in t:
print(next(t))
1:
a = (i for i in range(10))
while 1:
print(next(a)) #while 不会捕捉异常 会爆报错
2:
a = (i for i in range(10)) #一般生成器用for 会捕捉异常
for i in a:
print(i)