生成器和迭代器1

简单解释:生成器就是一类特殊的迭代器,同样遵循迭代器协议。

1.列表生成器:使用生成器简化了代码,表格中的代码效果一致

 正常代码 使用了生成器

a = []

for i in range(10):

a.append(i*2)

print(a)

b = [i*2 for i in range(10)]
# print(b.__len__())
# print(b.__iter__())
print(b)

 

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()

猜你喜欢

转载自www.cnblogs.com/mygodswangzi/p/11887794.html
今日推荐