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

Python運(yùn)算符重載的簡(jiǎn)單實(shí)例代碼

 更新時(shí)間:2022年01月09日 09:16:27   作者:慵懶之龜  
什么是運(yùn)算符重載,就是讓自定義的類(lèi)生成的對(duì)象(實(shí)例)能夠使用運(yùn)算符進(jìn)行操作,這篇文章主要給大家介紹了關(guān)于Python運(yùn)算符重載的相關(guān)資料,需要的朋友可以參考下

什么是運(yùn)算符重載

讓自定義的類(lèi)生成的對(duì)象(實(shí)例)能夠使用運(yùn)算符進(jìn)行操作

作用:

讓自定義的實(shí)例像內(nèi)建對(duì)象一樣進(jìn)行運(yùn)算符操作

讓程序簡(jiǎn)潔易讀

對(duì)自定義對(duì)象將運(yùn)算符賦予新的規(guī)則

算術(shù)運(yùn)算符的重載:

            方法名                  運(yùn)算符和表達(dá)式      說(shuō)明
            __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         冪運(yùn)算

以__pow__為例

class Achievement(object):
    def __init__(self,achievement):
        self.achievement=achievement
    def __pow__(self,other):
        return self.achievement**other.achievement
    
achievement01=Achievement(20)
achievement02=Achievement(20)
print(pow(achievement01,achievement02))

打印輸出的便是兩個(gè)成績(jī)的乘方104857600000000000000000000,其他運(yùn)算符重載的基本步驟和__pow__大致相同。

python 3 的版本中已經(jīng)沒(méi)有cmp函數(shù),被operator模塊代替,在交互模式下使用時(shí),需要導(dǎo)入模塊。

import operator 
operator.le(a, b)   
operator.eq(a, b)   
operator.ne(a, b)   
operator.ge(a, b)   
operator.gt(a, b)   
operator.__lt__(a, b)   
operator.__le__(a, b)   
operator.__eq__(a, b)   
operator.__ne__(a, b)   
operator.__ge__(a, b)   
operator.__gt__(a, b)

這幾個(gè)函數(shù)就是用來(lái)替換之前的cmp的,先簡(jiǎn)單說(shuō)下這幾個(gè)函數(shù)的意思吧

lt(a,b) 相當(dāng)于 a<b     數(shù)字或字母(ASCII)比大小 

le(a,b)相當(dāng)于a<=b

eq(a,b)相當(dāng)于a==b     字母完全一樣,返回True,

ne(a,b)相當(dāng)于a!=b

gt(a,b)相當(dāng)于a>b

ge(a,b)相當(dāng)于 a>=b
函數(shù)的返回值是布爾類(lèi)型

但是我們可以用運(yùn)算符重載來(lái)復(fù)現(xiàn)cmp的功能

例:

class Achievement(object):
    def __init__(self,achievement01,achievement02):
        self.achievement01=achievement01
        self.achievement02=achievement02
    def cmp(self):
        if self.achievement01>self.achievement02:
           print(self.achievement01,">",self.achievement02)
           return 1
        elif self.achievement01<self.achievement02:
            print(self.achievement01,"<",self.achievement02)
            return -1
        elif self.achievement01==self.achievement02:
            print(self.achievement01,"=",self.achievement02)
            return 0

 main.py:

from demo01 import *
def main():
    Achievement01=Achievement(100,50)
    Achievement01.cmp()
 
if __name__=="__main__":
    main()

上述例子中我在成績(jī)類(lèi)中寫(xiě)了一個(gè)cmp函數(shù),因?yàn)閜ython3中已經(jīng)棄用了cmp函數(shù),所以我們完全可以不按照標(biāo)準(zhǔn)的運(yùn)算符重載寫(xiě)成__cmp__,直接函數(shù)名cmp即可,這樣我們就又可以使用cmp函數(shù)了。

在主函數(shù)中傳入成績(jī)100和50,調(diào)用cmp函數(shù),輸出結(jié)果為100>50

反向運(yùn)算符的重載

當(dāng)運(yùn)算符的左側(cè)為內(nèi)建類(lèi)型時(shí),右側(cè)為自定義類(lèi)型進(jìn)行算術(shù)勻算符運(yùn)算時(shí)會(huì)出現(xiàn)TypeError錯(cuò)誤,因?yàn)闊o(wú)法修改內(nèi)建類(lèi)型的代碼          實(shí)現(xiàn)運(yùn)算符重載,此時(shí)需要使用反向運(yùn)算符的重載

反向算術(shù)運(yùn)算符的重載:

方法名                  運(yùn)算符和表達(dá)式       說(shuō)明
            __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      冪運(yùn)算

  示例:        

class Mylist:
    def __init__(self, iterable=()):
        self.data = list(iterable)
 
    def __repr__(self):
        return 'Mylist(%s)' % self.data
 
    def __add__(self, lst):
        print('__add__被調(diào)用')
        return Mylist(self.data + lst.data)
 
    def __mul__(self, rhs):
        # rhs為int類(lèi)型,不能用rhs.data
        print('__mul__被調(diào)用')
        return Mylist(self.data * rhs)
 
    def __rmul__(self, lhs):
        print("__rmul__被調(diào)用")
        return Mylist(self.data * lhs)
 
 
L1 = Mylist([1, 2, 3])
L2 = Mylist([4, 5, 6])
L3 = 3 * L1
print(L3)
L1 += L2
print(L1)
L2 *= 3
print(L2)

總結(jié)

到此這篇關(guān)于Python運(yùn)算符重載的文章就介紹到這了,更多相關(guān)Python運(yùn)算符重載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python如何查找列表中元素的位置

    python如何查找列表中元素的位置

    這篇文章主要介紹了python如何查找列表中元素的位置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python為QT程序添加圖標(biāo)的方法詳解

    python為QT程序添加圖標(biāo)的方法詳解

    這篇文章主要介紹了python為QT程序添加圖標(biāo)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Scrapy模擬登錄趕集網(wǎng)的實(shí)現(xiàn)代碼

    Scrapy模擬登錄趕集網(wǎng)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Scrapy模擬登錄趕集網(wǎng)的實(shí)現(xiàn)代碼,本文通過(guò)代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • virtualenv介紹及簡(jiǎn)明教程

    virtualenv介紹及簡(jiǎn)明教程

    這篇文章主要介紹了virtualenv介紹及簡(jiǎn)明教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Django對(duì)models里的objects的使用詳解

    Django對(duì)models里的objects的使用詳解

    今天小編就為大家分享一篇Django對(duì)models里的objects的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • 基于Python第三方插件實(shí)現(xiàn)西游記章節(jié)標(biāo)注漢語(yǔ)拼音的方法

    基于Python第三方插件實(shí)現(xiàn)西游記章節(jié)標(biāo)注漢語(yǔ)拼音的方法

    這篇文章主要介紹了基于Python第三方插件實(shí)現(xiàn)西游記章節(jié)標(biāo)注漢語(yǔ)拼音的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • python冒泡排序簡(jiǎn)單實(shí)現(xiàn)方法

    python冒泡排序簡(jiǎn)單實(shí)現(xiàn)方法

    這篇文章主要介紹了python冒泡排序簡(jiǎn)單實(shí)現(xiàn)方法,實(shí)例分析了Python冒泡排序的簡(jiǎn)單實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • python sort、sorted高級(jí)排序技巧分享(key的使用)

    python sort、sorted高級(jí)排序技巧分享(key的使用)

    這篇文章主要介紹了python sort、sorted高級(jí)排序技巧(key的使用),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Python中利用Scipy包的SIFT方法進(jìn)行圖片識(shí)別的實(shí)例教程

    Python中利用Scipy包的SIFT方法進(jìn)行圖片識(shí)別的實(shí)例教程

    SIFT算法可以檢測(cè)圖片中的局部特征,算法原理相當(dāng)復(fù)雜...但是!Python強(qiáng)大的第三方包Scipy中帶有實(shí)現(xiàn)SIFT算法的SIFT方法,我們只要拿來(lái)用就可以了,下面就為大家?guī)?lái)Python中利用Scipy包的SIFT方法進(jìn)行圖片識(shí)別的實(shí)例教程.
    2016-06-06
  • 如何利用pyecharts畫(huà)好看的餅狀圖

    如何利用pyecharts畫(huà)好看的餅狀圖

    這篇文章主要給大家介紹了關(guān)于如何利用pyecharts畫(huà)好看的餅狀圖的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論

射阳县| 望谟县| 车险| 广南县| 临沭县| 双鸭山市| 阿勒泰市| 平山县| 桦甸市| 伊川县| 晴隆县| 乌鲁木齐市| 措美县| 本溪市| 涿鹿县| 潼南县| 牟定县| 若尔盖县| 太白县| 青阳县| 朝阳区| 宕昌县| 临邑县| 常熟市| 哈密市| 丹巴县| 自治县| 开江县| 鄂尔多斯市| 霍林郭勒市| 阿拉尔市| 东源县| 锡林浩特市| 呼和浩特市| 盐津县| 城口县| 阜康市| 古丈县| 垫江县| 望奎县| 巫山县|