包含python面試函數(shù)重載的詞條

python 重載方法有哪些特點

說起python重載,大家學(xué)過其他的語言比如說C#語言的話,應(yīng)該知道有方法重載和運算符重載的概念,但是python重載的話,有它自己的特殊性,下面我說說自己的一點看法,希望大家踴躍拍磚。python 的重載主要包括方法重載和運算符重載。1.python 方法重載: 其他的語言一般對于方法重載的話,主要是根據(jù)參數(shù)的類型不同或者是數(shù)量不同來區(qū)分同名的方法。而python則比較特殊,它本身是動態(tài)語言,方法的參數(shù)是沒有類型的,當(dāng)調(diào)用傳值的時候才確定參數(shù)的類型,故對參數(shù)類型不同的方法無需考慮重載。對參數(shù)數(shù)量不同的方法,則(大多數(shù)情況下)可以采用參數(shù)默認(rèn)值來實現(xiàn)。比如你可以定義函數(shù)的默認(rèn)值:def info(x,y,z=1): pass2.python 運算符重載: 在C#中,我們通過使用關(guān)鍵字operator定義一個運算符方法,并定義與所在類相關(guān)的運算符行為。在 Python中,運算符重載的方式更為簡單——每一個類都默認(rèn)內(nèi)置了所有可能的運算符方法,只要重寫這個方法,就可以實現(xiàn)針對該運算符的重載。例如以下是重載加法操作:class Info(object): def __init__(self): self.a = 11 self.b = 22 def __add__(self,x): return self.a * self.b 上面的例子是重寫了+操作符號,你也可以重載其他的運算符。比如你可以重載乘號運算符,感興趣的話,可以自己寫寫代碼。希望上面講的2點能夠讓你對python重載有個簡單的認(rèn)識。有興趣的可以關(guān)注下。

創(chuàng)新互聯(lián)擁有一支富有激情的企業(yè)網(wǎng)站制作團(tuán)隊,在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)深耕十載,專業(yè)且經(jīng)驗豐富。十載網(wǎng)站優(yōu)化營銷經(jīng)驗,我們已為上1000+中小企業(yè)提供了成都網(wǎng)站設(shè)計、網(wǎng)站制作解決方案,按需規(guī)劃網(wǎng)站,設(shè)計滿意,售后服務(wù)無憂。所有客戶皆提供一年免費網(wǎng)站維護(hù)!

關(guān)于python的重載問題

沒有重載,但是可以有默認(rèn)參數(shù)和不定長參數(shù),可以判斷默認(rèn)值和參數(shù)長度來處理。

比如:

def range(start, end = -1):

if end == -1:

end = start

start = 0

def range(*args):

if len(args) == 1:

start = 0

end = args[0]

elif len(args) == 2:

start, end = args[0], args[1]

Python正確重載運算符的方法示例詳解

Python正確重載運算符的方法示例詳解

說到運算符重載相信大家都不陌生,運算符重載的作用是讓用戶定義的對象使用中綴運算符(如 + 和 |)或一元運算符(如 - 和 ~)。說得寬泛一些,在 Python 中,函數(shù)調(diào)用(())、屬性訪問(.)和元素訪問 / 切片([])也是運算符。

我們?yōu)?Vector 類簡略實現(xiàn)了幾個運算符。__add__ 和 __mul__ 方法是為了展示如何使用特殊方法重載運算符,不過有些小問題被我們忽視了。此外,我們定義的Vector2d.__eq__ 方法認(rèn)為 Vector(3, 4) == [3, 4] 是真的(True),這可能并不合理。下面來一起看看詳細(xì)的介紹吧。

運算符重載基礎(chǔ)

在某些圈子中,運算符重載的名聲并不好。這個語言特性可能(已經(jīng))被濫用,讓程序員困惑,導(dǎo)致缺陷和意料之外的性能瓶頸。但是,如果使用得當(dāng),API 會變得好用,代碼會變得易于閱讀。Python 施加了一些限制,做好了靈活性、可用性和安全性方面的平衡:

不能重載內(nèi)置類型的運算符

不能新建運算符,只能重載現(xiàn)有的

某些運算符不能重載——is、and、or 和 not(不過位運算符

、| 和 ~ 可以)

前面的博文已經(jīng)為 Vector 定義了一個中綴運算符,即 ==,這個運算符由__eq__ 方法支持。我們將改進(jìn) __eq__ 方法的實現(xiàn),更好地處理不是Vector 實例的操作數(shù)。然而,在運算符重載方面,眾多比較運算符(==、!=、、、=、=)是特例,因此我們首先將在 Vector 中重載四個算術(shù)運算符:一元運算符 - 和 +,以及中綴運算符 + 和 *。

一元運算符

-(__neg__)

一元取負(fù)算術(shù)運算符。如果 x 是 -2,那么 -x == 2。

+(__pos__)

一元取正算術(shù)運算符。通常,x == +x,但也有一些例外。如果好奇,請閱讀“x 和 +x 何時不相等”附注欄。

~(__invert__)

對整數(shù)按位取反,定義為 ~x == -(x+1)。如果 x 是 2,那么 ~x== -3。

支持一元運算符很簡單,只需實現(xiàn)相應(yīng)的特殊方法。這些特殊方法只有一個參數(shù),self。然后,使用符合所在類的邏輯實現(xiàn)。不過,要遵守運算符的一個基本規(guī)則:始終返回一個新對象。也就是說,不能修改self,要創(chuàng)建并返回合適類型的新實例。

對 - 和 + 來說,結(jié)果可能是與 self 同屬一類的實例。多數(shù)時候,+ 最好返回 self 的副本。abs(...) 的結(jié)果應(yīng)該是一個標(biāo)量。但是對 ~ 來說,很難說什么結(jié)果是合理的,因為可能不是處理整數(shù)的位,例如在ORM 中,SQL WHERE 子句應(yīng)該返回反集。

def __abs__(self):

return math.sqrt(sum(x * x for x in self))

def __neg__(self):

return Vector(-x for x in self) #為了計算 -v,構(gòu)建一個新 Vector 實例,把 self 的每個分量都取反

def __pos__(self):

return Vector(self) #為了計算 +v,構(gòu)建一個新 Vector 實例,傳入 self 的各個分量

x 和 +x 何時不相等

每個人都覺得 x == +x,而且在 Python 中,幾乎所有情況下都是這樣。但是,我在標(biāo)準(zhǔn)庫中找到兩例 x != +x 的情況。

第一例與 decimal.Decimal 類有關(guān)。如果 x 是 Decimal 實例,在算術(shù)運算的上下文中創(chuàng)建,然后在不同的上下文中計算 +x,那么 x!= +x。例如,x 所在的上下文使用某個精度,而計算 +x 時,精度變了,例如下面的

怎么理解Python中重載?通俗理解是

python里面沒有重載吧?

正常的重載說的應(yīng)該是函數(shù)方法的重載,即兩個函數(shù)的名稱相同但是參數(shù)不同是重載,會出現(xiàn)重載的情況一般是函數(shù)實現(xiàn)相同功能時,遇到參數(shù)類型可能不同的情況,會出現(xiàn)重載,如比較常見的對于加法的實現(xiàn),如果輸入兩個整數(shù)相加則直接使用整數(shù)加法,如果兩個字符串相加則使用字符串的拼接。輸入的參數(shù)類型不同,其實是兩個不同的函數(shù),這在那種強(qiáng)類型語言中是可以利用函數(shù)重載來實現(xiàn)的,而python中函數(shù)類型是動態(tài)的各種各樣的,所以不需要重載這個機(jī)制。相同函數(shù)名就是表示同一個方法。

網(wǎng)站題目:包含python面試函數(shù)重載的詞條
鏈接分享:http://muchs.cn/article20/phgijo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google虛擬主機(jī)、微信小程序、品牌網(wǎng)站設(shè)計、網(wǎng)站策劃標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)