python迭代器和生成器、异常

迭代器

  • 可以被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('程序其他代码');

猜你喜欢

转载自my.oschina.net/u/3764483/blog/1618226
今日推荐