最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

總結(jié)Python常用的魔法方法

 更新時(shí)間:2021年05月25日 16:46:17   作者:簡單生活,簡單愛  
今天帶大家學(xué)習(xí)Python的相關(guān)知識(shí),文中對Python常用的魔法方法作了非常詳細(xì)的總結(jié),對正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下

一、算數(shù)運(yùn)算符的魔法方法

  • python2.2以后,對類和類型進(jìn)行了統(tǒng)一,做法就是講int()、float()、str()、list()、tuple()這些BIF轉(zhuǎn)換為工廠函數(shù)(類對象)
  • 給出以下算數(shù)運(yùn)算符對應(yīng)的魔法方法,前面和后面都被雙下劃線包尾說明是魔法方法
運(yùn)算符 對應(yīng)的魔法方法 中文注釋
+ __ add__(self, other) 加法
- __ sub__(self, other) 減法
* __ mul__(self, other) 乘法
/ __ truediv__(self, other) 真除法
// __ floordiv__(self, other) 整數(shù)除法
% __ mod__(self, other) 取余除法
divmod(a, b) __ divmod__(self, other) 把除數(shù)和余數(shù)運(yùn)算結(jié)果結(jié)合,divmod(a,b)返回值是一個(gè)元組(a//b, a%b)
** __ pow__(self, other[,modulo]) self的other次方再對modulo取余
<< __ lshift__(self, other) 按位左移
>> __ rshift__(self, other) 按位右移
& __ and__(self, other) 按位與操作
^ __ xor__(self, other) 按位異或操作(同為0,異為1)
__ or__(self, other) 按位或操作(有1則1)
  • eg:
>>> type(len)
<class 'builtin_function_or_method'>            #普通的BIF
>>> type(int)
<class 'type'>             #工廠函數(shù)(類對象),當(dāng)調(diào)用它們的時(shí)候,其實(shí)就是創(chuàng)建了一個(gè)相應(yīng)的實(shí)例對象
>>> type(dir)
<class 'builtin_function_or_method'>
>>> type(list)
<class 'type'>

>>> a = int('123')        #創(chuàng)建一個(gè)相應(yīng)的實(shí)例對象a
>>> b = int('345')
>>> a + b              #python在兩個(gè)對象進(jìn)行相加操作
468
  • eg:舉個(gè)例子,下面定義一個(gè)比較特立獨(dú)行的類:

繼承int,并重寫__add__方法

>>> class New_int(int):
    def __add__(self,other):
        return int.__sub__(self,other)
    def __sub__(self,other):
        return int.__add__(self,other)

    
>>> a = New_int(3)
>>> b = New_int(5)
>>> a + b    #兩個(gè)對象相加,觸發(fā) __add__(self,other)方法
-2
>>> a - b
8
>>>

實(shí)例2:錯(cuò)誤寫法,會(huì)造成無限遞歸
>>> class New_int(int):
    def __add__(self,other):
        return (self + other)  
    def __sub__(self,other):
        return (self - other)


>>> class New_int(int):
    def __add__(self,other):
        return (int(self) + int(other))       #將self與other強(qiáng)制轉(zhuǎn)換為整型,所以不會(huì)出現(xiàn)兩個(gè)對象相加觸發(fā)__add__()方法
    def __sub__(self,other):
        return (int(self) - int(other))

    
>>> a = New_int(3)
>>> b = New_int(5)
>>> a + b
8

二、反運(yùn)算相關(guān)的魔法方法

  • 反運(yùn)算相關(guān)的魔法方法
魔法方法 定義
__ radd__(self, other) 定義加法的行為:+(當(dāng)左操作數(shù)不支持相應(yīng)的操作時(shí)被調(diào)用)
__ rsub__(self, other) 定義減法的行為:-(當(dāng)左操作數(shù)不支持相應(yīng)的操作時(shí)被調(diào)用)
__ rmul__(self, other) 定義乘法的行為:*(當(dāng)左操作數(shù)不支持相應(yīng)的操作時(shí)被調(diào)用)
__ rtruediv__(self, other) 定義真除法的行為:/(當(dāng)左操作數(shù)不支持相應(yīng)的操作時(shí)被調(diào)用)
__ rfloordiv__(self, other) 定義整數(shù)除法的行為://(當(dāng)左操作數(shù)不支持相應(yīng)的操作時(shí)被調(diào)用)
__ rmod__(self, other) 定義取模算法的行為:%(當(dāng)左操作數(shù)不支持相應(yīng)的操作時(shí)被調(diào)用)
__ rdivmod__(self, other) 定義當(dāng)被divmod()調(diào)用時(shí)的行為(當(dāng)左操作數(shù)不支持相應(yīng)的操作時(shí)被調(diào)用)
__ rpow__(self, other) 定義當(dāng)被power()調(diào)用或**運(yùn)算時(shí)的行為(當(dāng)左操作數(shù)不支持相應(yīng)的操作時(shí)被調(diào)用)
__ rlshift__(self, other) 定義按位左移位的行為:<<(當(dāng)左操作數(shù)不支持相應(yīng)的操作時(shí)被調(diào)用)
__ rrshift__(self, other) 定義按位右移位的行為:>>(當(dāng)左操作數(shù)不支持相應(yīng)的操作時(shí)被調(diào)用)
__ rand__(self, other) 定義按位與操作的行為:&(當(dāng)左操作數(shù)不支持相應(yīng)的操作時(shí)被調(diào)用)
__ rxor__(self, other) 定義按位異或操作的行為:^(當(dāng)左操作數(shù)不支持相應(yīng)的操作時(shí)被調(diào)用)
__ ror__(self, other) 定義按位或操作的行為:丨(當(dāng)左操作數(shù)不支持相應(yīng)的操作時(shí)被調(diào)用)
>>> class int(int):
    def __add__(self,other):
        return int.__sub__(self,other)

    
>>> a = int(3)
>>> b = int(2)
>>> a + b
1

反運(yùn)算與算術(shù)運(yùn)算符的不同之處是,反運(yùn)算多了一個(gè)'r',例如 __add__()的反運(yùn)算對應(yīng)為 __radd__()

>>> a + b

這里a是加數(shù),b是被加數(shù),如果a對象的__add__()方法沒有實(shí)現(xiàn)或者不支持相應(yīng)的操作,那么python就會(huì)自動(dòng)調(diào)用b的__radd__()方法

實(shí)例:

>>> class Nint(int):
    def __radd__(self,other):
        return int.__sub__(self,other)

    
>>> a = Nint(5)
>>> b = Nint(3)
>>> a + b      #由于a對象默認(rèn)有__add__()方法,所以b的__radd__()沒有執(zhí)行
8

實(shí)例2:

>>> class Nint(int):
    def __radd__(self,other):
        return int.__sub__(self,other)

    
>>> b = Nint(5)
>>> 3 + b         #由于3無__add__()方法,所以執(zhí)行b的反運(yùn)算__radd__(self,other)方法,其中self是b對象
2

eg:注:在重寫反運(yùn)算魔法方法時(shí),一定要注意順序問題。得到的應(yīng)該是個(gè)負(fù)數(shù),所以順序改變下。

在這里插入圖片描述 

三、增量賦值運(yùn)算

增量賦值運(yùn)算的魔法方法

魔法方法 定義
__ iadd__(self, other) 定義賦值加法的行為:+=
__ isub__(self, other) 定義賦值減法的行為:-=
__ imul__(self, other) 定義賦值乘法的行為:*=
__ itruediv__(self, other) 定義賦值真除法的行為:/=
__ ifloordiv__(self, other) 定義賦值整數(shù)除法的行為://=
__ imod__(self, other) 定義賦值取模算法的行為:%=
__ ipow__(self, other) 定義賦值冪運(yùn)算的行為:**=
__ ilshift__(self, other) 定義賦值按位左移位的行為:<<=
__ irshift__(self, other) 定義賦值按位右移位的行為:>>=
__ iand__(self, other) 定義賦值按位與操作的行為:&=
__ ixor__(self, other) 定義賦值按位異或操作的行為:^=
__ ior__(self, other) 定義賦值按位或操作的行為:丨=
- -

四、一元操作符

  • 一元操作符的魔法方法
魔法方法 定義
__ neg__(self) 定義正號(hào)的行為:+x
__ pos__(self) 定義負(fù)號(hào)的行為:-x
__ abs__(self) 定義當(dāng)被abs()調(diào)用時(shí)的行為
__ invert__(self) 定義按位求反的行為:~x

到此這篇關(guān)于總結(jié)Python常用的魔法方法的文章就介紹到這了,更多相關(guān)Python魔法方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python爬蟲包 BeautifulSoup  遞歸抓取實(shí)例詳解

    Python爬蟲包 BeautifulSoup 遞歸抓取實(shí)例詳解

    這篇文章主要介紹了Python爬蟲包 BeautifulSoup 遞歸抓取實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • python os模塊常用的29種方法使用詳解

    python os模塊常用的29種方法使用詳解

    這篇文章主要介紹了python os模塊常用的29種方法使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 關(guān)于如何使用python的gradio庫

    關(guān)于如何使用python的gradio庫

    這篇文章主要介紹了關(guān)于如何使用python的gradio庫,Gradio是一個(gè)功能豐富的Python庫,可以讓您輕松創(chuàng)建和共享自己的交互式機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型,需要的朋友可以參考下
    2023-04-04
  • python 數(shù)據(jù)類(dataclass)的具體使用

    python 數(shù)據(jù)類(dataclass)的具體使用

    本文主要介紹了python 數(shù)據(jù)類(dataclass)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python實(shí)現(xiàn)批量下載ts文件并合并為mp4

    Python實(shí)現(xiàn)批量下載ts文件并合并為mp4

    這篇文章主要為大家詳細(xì)介紹了如何通過Python語言實(shí)現(xiàn)批量下載ts文件并合并為mp4視頻的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-06-06
  • Flask創(chuàng)建并運(yùn)行數(shù)據(jù)庫遷移的實(shí)現(xiàn)過程

    Flask創(chuàng)建并運(yùn)行數(shù)據(jù)庫遷移的實(shí)現(xiàn)過程

    Flask創(chuàng)建并運(yùn)行數(shù)據(jù)庫遷移的過程是一個(gè)涉及多個(gè)步驟的操作,旨在幫助開發(fā)者在開發(fā)過程中管理數(shù)據(jù)庫模式的變化,而不需要手動(dòng)地刪除和重建數(shù)據(jù)庫表,從而避免數(shù)據(jù)丟失,以下是一個(gè)詳細(xì)的步驟說明,需要的朋友可以參考下
    2024-09-09
  • 基于DATAFRAME中元素的讀取與修改方法

    基于DATAFRAME中元素的讀取與修改方法

    今天小編就為大家分享一篇基于DATAFRAME中元素的讀取與修改方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python中cv2.imdecode()與cv2.imencode()的使用小結(jié)

    python中cv2.imdecode()與cv2.imencode()的使用小結(jié)

    本文介紹了cv2.imencode()和cv2.imdecode()函數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • 分享19個(gè)常用的Python開源庫

    分享19個(gè)常用的Python開源庫

    這篇文章主要介紹了Python中常用的數(shù)據(jù)科學(xué)、Web開發(fā)、網(wǎng)絡(luò)爬蟲、機(jī)器學(xué)習(xí)、圖形用戶界面和其它常用庫,涵蓋了這些領(lǐng)域的核心工具和庫,介紹了它們的特點(diǎn)和使用示例,需要的朋友可以參考下
    2025-03-03
  • 我就是這樣學(xué)習(xí)Python中的列表

    我就是這樣學(xué)習(xí)Python中的列表

    這篇文章主要給大家介紹了關(guān)于我是如何學(xué)習(xí)Python中的列表的,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06

最新評(píng)論

上高县| 江陵县| 奎屯市| 蓬莱市| 兴义市| 新建县| 崇文区| 灯塔市| 揭西县| 和龙市| 仁布县| 崇左市| 庆安县| 洛南县| 乐山市| 客服| 万安县| 河津市| 南乐县| 萨嘎县| 定襄县| 荥阳市| 德格县| 阿拉尔市| 乳山市| 桐梓县| 渭源县| 策勒县| 太保市| 天镇县| 连云港市| 鹿邑县| 利津县| 中江县| 宜宾市| 商南县| 砚山县| 汕尾市| 宁津县| 宣城市| 广饶县|