婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 解析python高級異常和運算符重載

解析python高級異常和運算符重載

熱門標簽:地圖標注自己和別人標注區別 海外網吧地圖標注注冊 孝感營銷電話機器人效果怎么樣 聊城語音外呼系統 打電話機器人營銷 商家地圖標注海報 ai電銷機器人的優勢 南陽打電話機器人 騰訊地圖標注沒法顯示

一、高級異常

回顧異常相關的語句:

try-except:用來捕獲異常的通知

try-finally:用來做一定要做的事

reise:用來發生異常通知

assert:用來根據條件來發出AssertionError類型的異常通知

with語句:

語句: with 表達式1 [as 變量1],表達式2 [as 變量2]:

         語句塊

作用:使用于對資源進行訪問的場合,確保使用過程中不管是否發生異常,都會執行必須的'清理'操作,并釋放資源

如:文件使用后自動關閉;線程中鎖定的自動獲取和釋放等

用with語句代替try-finally語句

def read_from_file(filename='info.txt'):
     try:
         with open(filename) as f:
             print("正在讀取文件")
             n = int(f.read())
             print('n=', n)
             print('文件已經關閉')
         # f = open(filename)
         # try:
         #     print("正在讀取文件")
         #     n = int(f.read())
         #     print("n=", n)
         # finally:
         #     f.close()
         #     print("文件已經關閉")
     except OSError:
         print("文件打開失敗")
 
 
 read_from_file()

二、環境管理器

1、類內有__enter__和__exit__實例方法的類被稱為環境管理器

2、能夠用with語句管理的對象必須是環境管理器

3、 __enter__方法將在進入with語句時被調用,并返回由as變量管理的對象

4、__exit__將在離開with語句時被調用,且可以用參數來判斷在離開with語句時是否有異常發生并做出相應的處理

class A:
     def __enter__(self):
         print("已進入with語句")
         return self  # 返回的對象將由 as綁定
 
     def __exit__(self, exc_type, exc_val, exc_tb):
         print("已離開with語句")
 # a = A()
 with A() as a:
     print("這是with語句內的一條語句")
     int(input("請輸入整數: "))

已進入with語句

這是with語句內的一條語句

請輸入整數: 2

2.1、對象的屬性管理函數

1、getattr(obj, name[, default])從一個對象得到對象的屬性;getattr(x, 'y')等同于x.y;當屬性不存在時,如果給出default參數,則返回default,如果沒有給出default則產生一個AttributeError錯誤

2、hasattr(obj, name)用給定的name返回對象obj是否有此屬性,此種做法可以避免在getattr(obj, name)時引發錯誤

3、setattr(obj, name, value)給對象obj的名為name的屬性設置相應的值value, set(x,'y', v) 等同于 x.y = v

4、delattr(obj, name)刪除對象obj中的name屬性,delattr(x, 'y') 等同于 del x.y

class Car:
     def __init__(self, c, b):
         self.color, self.brand = c, b
 
     def get_car_attr(self, attr_name):
         '''此方法用于獲取對象的屬性,如果屬性名attr_name
         在此對象內不存在則返回 None
         '''
         return getattr(self, attr_name, None)
 
 c1 = Car('黑色', 'Benz')
 v = c1.get_car_attr('color')
 # try:
 #     v = c1.__dict__['aaaaa']
 # except KeyError:
 #     v = None
 if v is None:
     print("沒有顏色屬性")
 else:
     print("顏色是:", v)

getatter(obj,name[,default])

三、運算符重載

讓自定義的類生成的對象(實例)能夠使用運算符進行操作

作用:讓自定義的類的實例像內建對象一樣能夠運行運算符操作,讓程序簡單易讀,對自定義的對象,將運算符賦予新的運算規則

3.1、算術運算符的重載

__add__(self, rhs)      self + rhs    加法
__sub__(self, rhs)       self - rhs    減法
__mul__(self, rhs)       self * rhs    乘法
__truediv__(self, rhs)   self / rhs    除法
__floordiv__(self, rhs)    self // rhs   地板除法
__mod__(self, rhs)       self % rhs    求余
__pow__(self, rhs)       self ** rhs   冪

注: rhs (right hands side) 右手邊

class MyNumber:
     def __init__(self, v):
         self.data = v
 
     def __repr__(self):
        return 'MyNumber(%d)' % self.data
 
     # def myadd(self, other):
     #     v = self.data + other.data
     #     return MyNumber(v)
 
     def __add__(self, other):
        print("__add__被調用")
         v = self.data + other.data
         return MyNumber(v)
 
     def __sub__(self, rhs):
         v = self.data - rhs.data
         return MyNumber(v)
 
 n1 = MyNumber(100)
 n2 = MyNumber(200)
 # n3 = n1.myadd(n2)
 # n3 = n1.__add__(n2)
 n3 = n1 + n2  # __add__被調用
 print(n3)   # MyNumber(300)
 n4 = n3 - n2
 print(n4)   # MyNumber(100)
class MyList:
     def __init__(self, iterable):
         self.data = list(iterable)
 
     def __add__(self, rhs):
         return MyList(self.data + rhs.data)
 
     def __repr__(self):
         return 'MyList(%r)' % self.data

     def __mul__(self, rhs):  # rhs 綁定整數
         return MyList(self.data * rhs)
 
 L1 = MyList([1, 2, 3])
 L2 = MyList([4, 5, 6])
 L3 = L1 + L2  # 等同于L1.__add__(L2)
 print(L3)  # MyList([1,2,3,4,5,6])
 L4 = L2 + L1  # 等同于L2.__add__(L1)
 print(L4)  # MyList([4,5,6,1,2,3])
 L5 = L1 * 2  # L1.__mul__(2)
 print(L5)  # MyList([1,2,3,1,2,3])

四、反向算術運算符的重載

__radd__(self, lhs)      lhs + self    加法
__rsub__(self, lhs)      lhs - self    減法
__rmul__(self, lhs)      lhs * self    乘法
__rtruediv__(self, lhs)    lhs / self    除法
__rfloordiv__(self, lhs)   lhs // self   地板除法
__rmod__(self, lhs)      lhs % self    求余
__rpow__(self, lhs)      lhs ** self   冪

class MyList:
     def __init__(self, iterable):
         self.data = list(iterable)
 
     def __add__(self, rhs):
         return MyList(self.data + rhs.data)
 
     def __repr__(self):
        return 'MyList(%r)' % self.data
 
     def __mul__(self, rhs):  # rhs 綁定整數
         print('__mul__被調用')
         return MyList(self.data * rhs)
     def __rmul__(self, lhs):
         print('__rmul__被調用')
         return MyList(self.data * lhs)
 
 L1 = MyList([1, 2, 3])
 L2 = MyList([4, 5, 6])
 L5 = L1 * 2  # L1.__mul__(2)
 print(L5)  # MyList([1,2,3,1,2,3])
 
 L6 = 2 * L1  # 2.__mul__(L1)
 print(L6)

五、復合賦值算術運算符的重載

__iadd__(self, rhs)     self += rhs    加法
__isub__(self, rhs)       self -= rhs    減法
__imul__(self, rhs)       self *= rhs    乘法
__itruediv__(self, rhs)   self /= rhs    除法
__ifloordiv__(self, rhs)    self //= rhs   地板除法
__imod__(self, rhs)       self %= rhs    求余
__ipow__(self, rhs)       self **= rhs    冪

class MyList:
    def __init__(self, iterable):
        print("aaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
        self.data = list(iterable)

    def __add__(self, rhs):
        print('__add__被調用')
        return MyList(self.data + rhs.data)

    def __repr__(self):
        return 'MyList(%r)' % self.data

    def __iadd__(self, rhs):
        print("__iadd__被調用?。。。?)
        self.data.extend(rhs.data)
        return self

L1 = MyList([1, 2, 3])  # aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
L2 = MyList([4, 5, 6])  # aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
L1 += L2  # 當沒有__iadd__方法時,等同于調用L1 = L1 + L2    __iadd__被調用?。。?!
print(L1)   # MyList([1, 2, 3, 4, 5, 6])

六、比較運算符的重載

__lt__(self, rhs)   self rhs      小于
__le__(self, rhs)    self = rhs    小于等于
__gt__(self, rhs)    self > rhs    大于
__ge__(self, rhs)    self >= rhs    大于等于
__eq__(self, rhs)    self == rhs    等于
__ne__(self, rhs)    self != rhs    不等于

注:比較運算符通常返回True或False

七、位運算符重載

__invert__(self)      ~ self      取反(一元運算符)
__and__(self, rhs)    self  rhs 位與
__or__(self, rhs)     self |  rhs 位或
__xor__(self, rhs)    self ^  rhs 位異或
__lshift__(self, rhs)    self rhs 左移
__rshift__(self, rhs)    self >> rhs 右移

八、反向位運算符重載

__rand__(self, lhs)    lhs  self 位與
__ror__(self, lhs)    lhs |  self 位或
__rxor__(self, lhs)    lhs ^  self 位異或
__rlshift__(self, lhs)    lhs self 左移
__rrshift__(self, lhs)    lhs >> self 右移

九、復合賦值位運算符重載

__iand__(self, rhs) self =  rhs 位與
__ior__(self, rhs) self |=  rhs 位或
__ixor__(self, rhs) self ^=  rhs 位異或
__ilshift__(self, rhs) self = rhs 左移
__irshift__(self, rhs) self >>= rhs 右移

十、一元運算符的重載

__neg__(self) - self 負號
__pos__(self)  + self 正號
__invert__(self) ~ self 取反

一元運算符的重載方法:

class 類名:
def __xxx__(self):

class MyList:
    def __init__(self, iterable):
        print("__init__被調用")
        self.data = list(iterable)

    def __repr__(self):
        return 'MyList(%r)' % self.data

    def __neg__(self):
        '''此方法用來制定 - self 返回的規則'''
        # L = [-x for x in self.data]
        L = (-x for x in self.data)
        return MyList(L)

L1 = MyList([1, -2, 3, -4])
L2 = -L1
print(L2)

運算符重載說明:

運算符重載不能改變運算符的優先級

Python類名最好用駝峰命名法:

  • MyList MyRange 大駝峰(所有單詞首字母大寫,其余小寫)
  • getStudentAge 小駝峰(第一個單詞首字母小寫,其它首字母大寫)

十一、in / not in 運算符的重載

重載方法:

__contains__(self, e) e in self 成員運算

class MyList:
    def __init__(self, iterable):
        print("__init__被調用")
        self.data = list(iterable)

    def __repr__(self):
        return 'MyList(%r)' % self.data

    def __contains__(self, e):
        '''此方法用來實現 in / not in 運算符的重載'''
        print("__contains__被調用")
        for x in self.data:
            if x == e:
                return True
        return False


L1 = MyList([1, -2, 3, -4])
if -2 in L1:
    print('-2 在 L1 中')
else:
    print('-2 不在 L1中')


# 當MyList的類內重載了__contains__方法,則not in也同時可用
if -3 not in L1:
    print("-3 不在 L1中")
else:
    print('-3 在 L2中')

十二、索引和切片運算符的重載

__getitem__(self, i)     x = self[i] 索引/切片取值
__setitem__(self, i, v)      self[i] = v 索引/切片賦值
__delitem__(self, i)        del self[i] del語句刪除索引等

作用:

讓自定義的類型的對象能夠支持索引和切片操作

class MyList:
    def __init__(self, iterable):
        print("__init__被調用")
        self.data = list(iterable)

    def __repr__(self):
        return 'MyList(%r)' % self.data

    def __getitem__(self, i):
        print("__getitem__被調用, i=", i)
        # if type(i) is not int:
        #     raise TypeError
        return self.data[i]

    def __setitem__(self, i, v):
        print("__setitem__被調用, i=", i, 'v =', v)
        self.data[i] = v  # 修改data綁定的列表


L1 = MyList([1, -2, 3, -4])
v = L1[-1]
print(v)

L1[1] = 2  # 等同于調用 L1.__setitem__(1, 2)
print(L1)

# 以下操作會出錯
# print(L1[100000000000])
# print(L1['hello'])

十三、slice 構造函數

作用:用于創建一個Slice切片對象, 此對象存儲一個切片的起始值,終止值和步長信息

slice(start, stop=None, step=None) 創建一個切片對象

slice的對象的屬性:

  • s.start 切片起始值,默認為None
  • s.stop 切片終止值,默認為None
  • s.step 切片步長 ,默認為None
class MyList:
    def __init__(self, iterable):
        print("__init__被調用")
        self.data = list(iterable)

    def __repr__(self):
        return 'MyList(%r)' % self.data

    def __getitem__(self, i):
        print("__getitem__被調用, i=", i)
        if type(i) is int:
            print("正在做索引操作")
        elif type(i) is slice:
            print("正在做切片操作")
            print("切片的起始值:", i.start)
            print("切片的終止值:", i.stop)
            print("切片的步長:", i.step)
        else:
            raise KeyError
        return self.data[i]


L1 = MyList([1, -2, 3, -4, 5, -6])

print(L1[::2])  # 等同于調用L1[slice(None, None, 2)]

以上就是解析python高級異常和運算符重載的詳細內容,更多關于python 高級異常 運算符重載的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • Python的運算符重載詳解
  • Python運算符重載詳解及實例代碼
  • Python運算符重載用法實例分析
  • Python運算符重載用法實例
  • Python 捕獲代碼中所有異常的方法
  • Python同時處理多個異常的方法
  • 解決python ThreadPoolExecutor 線程池中的異常捕獲問題
  • 使用Python將Exception異常錯誤堆棧信息寫入日志文件
  • 解決Python 異常TypeError: cannot concatenate ''str'' and ''int'' objects
  • Python 輸出詳細的異常信息(traceback)方式

標簽:撫州 牡丹江 六盤水 揚州 南寧 迪慶 楊凌 聊城

巨人網絡通訊聲明:本文標題《解析python高級異常和運算符重載》,本文關鍵詞  解析,python,高級,異常,和,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《解析python高級異常和運算符重載》相關的同類信息!
  • 本頁收集關于解析python高級異常和運算符重載的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    一区二区三区四区亚洲| 春色校园综合激情亚洲| 国产一区二区精品在线观看| 欧美午夜片在线观看| 亚洲精品欧美综合四区| 欧美在线免费视屏| 亚洲电影在线播放| www.色精品| 亚洲柠檬福利资源导航| 欧美在线看片a免费观看| 亚洲成人综合视频| 在线一区二区观看| 亚洲高清免费观看| 欧美少妇一区二区| 午夜婷婷国产麻豆精品| 91麻豆精品国产综合久久久久久| 亚洲成人综合网站| 久久国产三级精品| 欧美一区二区精品| 国产精品1区2区3区| 国产清纯在线一区二区www| 国产高清亚洲一区| 成人欧美一区二区三区视频网页| 99精品在线免费| 亚洲一区二区在线视频| 日韩欧美在线网站| 丁香五精品蜜臀久久久久99网站| 亚洲另类春色国产| 日韩欧美色综合网站| 99精品国产视频| 久久国产精品72免费观看| 国产精品久久久99| 337p亚洲精品色噜噜狠狠| 国产成人在线看| 亚洲一区二区不卡免费| 久久人人爽人人爽| 亚洲18女电影在线观看| 国产日韩欧美精品电影三级在线| 在线看日本不卡| 久久成人久久鬼色| 中文字幕一区二区日韩精品绯色| 欧美亚洲综合网| 国产精品1024| 日韩福利视频导航| 最近日韩中文字幕| 精品国产一区二区三区忘忧草| av亚洲精华国产精华精| 美女mm1313爽爽久久久蜜臀| 26uuu亚洲综合色| 91麻豆精品国产91| 91欧美一区二区| 狠狠色丁香久久婷婷综| 亚洲va欧美va天堂v国产综合| 久久精品在线观看| 日韩欧美在线1卡| 在线免费不卡视频| 成人午夜精品在线| 久久国产免费看| 亚洲一级片在线观看| 国产偷国产偷亚洲高清人白洁| 日韩一区二区高清| 欧美一区国产二区| 91啪亚洲精品| 91官网在线观看| 国产精品白丝jk黑袜喷水| 精品一区二区在线播放| 久久精品国产精品亚洲精品| 亚洲五月六月丁香激情| 亚洲国产成人va在线观看天堂| 亚洲欧美日本韩国| 一区二区国产盗摄色噜噜| 一区二区国产盗摄色噜噜| 亚洲靠逼com| 亚洲成人一区在线| 蜜桃视频免费观看一区| 国产精品一区二区久激情瑜伽| 精品午夜一区二区三区在线观看 | 麻豆精品在线播放| 日本午夜精品视频在线观看 | 99久久精品免费| www.亚洲免费av| 色菇凉天天综合网| 91极品美女在线| 欧美欧美午夜aⅴ在线观看| 欧美一区二区私人影院日本| 欧美一区欧美二区| 久久久美女毛片| 国产精品久久99| 肉色丝袜一区二区| 国产资源在线一区| 色综合天天天天做夜夜夜夜做| 91浏览器打开| 欧美视频在线观看一区二区| 欧美福利一区二区| 久久综合色一综合色88| 1区2区3区国产精品| 午夜精品福利一区二区三区av| 蜜臀91精品一区二区三区| 不卡一区二区中文字幕| 欧美日韩亚洲丝袜制服| 久久久久久一二三区| 亚洲人成7777| 国产原创一区二区| 欧美一区二视频| 自拍偷拍欧美精品| 免费精品视频在线| 成人avav影音| 日韩欧美国产wwwww| 亚洲视频图片小说| 国产中文字幕精品| 欧美视频自拍偷拍| 国产精品免费视频网站| 免费一级欧美片在线观看| 色综合久久天天综合网| 久久精品亚洲国产奇米99 | 亚洲精品国产成人久久av盗摄| 免费在线成人网| 欧美性猛交xxxx乱大交退制版| 久久精品这里都是精品| 午夜精品一区二区三区三上悠亚| 成人手机电影网| 精品久久久久久久久久久久久久久久久| 国产精品网曝门| 国产一区二区三区免费在线观看 | 91丨porny丨国产入口| 日韩色视频在线观看| 一区二区不卡在线播放| 99国产精品视频免费观看| 国产午夜久久久久| 韩国女主播成人在线| 欧美变态tickle挠乳网站| 日韩av一级片| 日韩一级视频免费观看在线| 一区二区三区中文字幕精品精品| 成人av在线影院| 国产精品国产精品国产专区不蜜| 国内精品伊人久久久久av影院| 欧美一区二区美女| 久久99精品久久久久久动态图| 日韩欧美色综合网站| 日韩国产成人精品| 欧美美女网站色| 日本不卡一区二区| 91麻豆精品国产无毒不卡在线观看| 午夜精品免费在线| 91精品免费观看| 韩国三级电影一区二区| 国产日韩影视精品| 99国产精品久久久久| 亚洲综合色丁香婷婷六月图片| 欧美日本乱大交xxxxx| 亚洲18女电影在线观看| 91麻豆精品91久久久久久清纯| 天堂一区二区在线免费观看| 日韩精品中午字幕| 国产精品中文字幕欧美| 国产精品久久久久久久久搜平片 | 中文字幕二三区不卡| 91老师片黄在线观看| 午夜精品aaa| 337p粉嫩大胆色噜噜噜噜亚洲| 极品瑜伽女神91| 中日韩免费视频中文字幕| 99精品国产91久久久久久 | 亚洲午夜在线视频| 日韩欧美在线综合网| 国产黑丝在线一区二区三区| 国产精品传媒在线| 欧美久久高跟鞋激| 国产一区二区三区精品视频| 亚洲精品日日夜夜| 精品久久99ma| 91视频在线观看免费| 亚洲v日本v欧美v久久精品| www激情久久| 91免费观看视频| 久久国产精品区| 伊人性伊人情综合网| 2017欧美狠狠色| 欧美巨大另类极品videosbest| 懂色av一区二区三区蜜臀| 亚洲综合丝袜美腿| 国产日产亚洲精品系列| 色88888久久久久久影院野外| 日本最新不卡在线| 亚洲丝袜精品丝袜在线| 26uuu久久天堂性欧美| 欧美视频在线一区| 91亚洲精品久久久蜜桃| 国模娜娜一区二区三区| 亚洲五月六月丁香激情| 国产精品美女久久久久久久久久久| 99精品久久只有精品| 国产精品一区二区视频| 亚洲va国产天堂va久久en| 亚洲色图欧美激情| 国产亚洲一二三区| 91精品婷婷国产综合久久| 欧美性大战xxxxx久久久| 成人a区在线观看|