迭代器
- 可以被next()函数调用并不断返回下一个值(直到没有数据是抛出StopIteration)的对象
-
l=[1,2,3]; print(type(l)) l=iter(l); print(type(l)) for i in l: print(i); print(next(l)); print(next(l)); print(next(l));
- 迭代器内部持有一个状态,该状态用于记录当前迭代所在的位置,
- 以方便下次迭代的时候获取正确的元素
- 斐波那契数列演示迭代器、生成器
-
def fab(max): n,a,b=0,0,1 L=[]; while n<max: #print(b); L.append(b); a,b=b,a+b; n=n+1; return L; l=fab(10) for i in l: print(i);
- 可迭代类
-
class Fab(object): def __init__(self,max): self.max=max; self.n,self.a,self.b=0,0,1; def __iter__(self): return self; def __next__(self): if self.n<self.max: r=self.b; self.a,self.b=self.b,self.a+self.b; self.n+=1; return r; raise StopIteration(); f=Fab(10); print(next(f)); print(next(f)); print(next(f)); print(next(f)); print(next(f));
yield生成器
-
def fab(max): n,a,b=0,0,1 while n<max: # print(b); yield b; a,b=b,a+b; n=n+1; l=fab(10); print(next(l)); print(next(l)); print(next(l)); print(next(l));
异常
-
a=10; b=input('请输入被除数:') try:#可能产生异常的语句 b = int(b); c = a / b; print(c) except Exception:#捕获异常并处理 print('发生错误!') print("程序正常结束..");
- 多路捕获错误信息:子类错误在前,父类错误在后
-
a=10; b=input('请输入被除数:') try: b = int(b); c = a / b; print(c) except ZeroDivisionError as zero:#子类错误 print('被除数不能为0..异常信息:',zero) except ValueError as v:#子类错误 print('转换数字 出错 请输入数字.异常信息:',v) except Exception:#父类错误 print('发生错误!') else:#没有异常才会执行的代码 print("程序正常结束..")
- finally:最终要执行的内容写在finally中
- 作用:释放资源
-
a=10; b=input('请输入被除数:') try: b = int(b); c = a / b; print(c) except ZeroDivisionError as zero:#子类错误 print('被除数不能为0..异常信息:',zero) except ValueError as v:#子类错误 print('转换数字 出错 请输入数字.异常信息:',v) except Exception:#父类错误 print('发生错误!') else:#没有异常才会执行的代码 print("程序正常结束.."); finally: try: del a,b,c except Exception as e: print(e) print("finally:快儿 释放资源"); print('程序其他代码');