简单解释:生成器就是一类特殊的迭代器,同样遵循迭代器协议。
1.列表生成器:使用生成器简化了代码,表格中的代码效果一致
正常代码 | 使用了生成器 |
a = [] for i in range(10): a.append(i*2) print(a) |
b = [i*2 for i in range(10)] |
2.斐波那契数列(Fibonacci),除第一个数和第二个数外,任意一个数都是前两个数相加可得
代码一:
def fib(max):
n,a,b = 0,1,1
while n<max:
print(b)
a,b = b,b+a
n=n+1
return "done"
fib(10)
代码二:
def fib1(max):
n,a,b = 0,0,1
while n<max:
yield b
# print(b)
a,b = b,b+a
n=n+1
return "done" #异常则打印
f =fib1(10) #只是调用了并没有执行,是因为yield
#异常处理
while True: #这其中有两层循坏(while 和for ),但是结果只有一次循坏,是因为生成器只遍历一次
try: #try内部的代码,是抓这段代码的异常,一旦出错就会获取
print(f.__next__())
print("start-》")
for i in f: #不会重头开始打印,会从当前位置打印
print(i)
except StopIteration as e:
print("出错值",e.value) #输出出错的值
breakpoint()