python迭代器和生成器、異常

迭代器app

  • 能夠被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('程序其餘代碼');
相關文章
相關標籤/搜索