python函數重載實例的簡單介紹

本文目錄一覽:

python 重載方法有哪些特點

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

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

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

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

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

運算符重載基礎

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

不能重載內置類型的運算符

不能新建運算符,只能重載現有的

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

、| 和 ~ 可以)

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

一元運算符

-(__neg__)

一元取負算術運算符。如果 x 是 -2,那麼 -x == 2。

+(__pos__)

一元取正算術運算符。通常,x == +x,但也有一些例外。如果好奇,請閱讀「x 和 +x 何時不相等」附註欄。

~(__invert__)

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

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

對 – 和 + 來說,結果可能是與 self 同屬一類的實例。多數時候,+ 最好返回 self 的副本。abs(…) 的結果應該是一個標量。但是對 ~ 來說,很難說什麼結果是合理的,因為可能不是處理整數的位,例如在ORM 中,SQL WHERE 子句應該返回反集。

def __abs__(self):

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

def __neg__(self):

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

def __pos__(self):

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

x 和 +x 何時不相等

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

第一例與 decimal.Decimal 類有關。如果 x 是 Decimal 實例,在算術運算的上下文中創建,然後在不同的上下文中計算 +x,那麼 x!= +x。例如,x 所在的上下文使用某個精度,而計算 +x 時,精度變了,例如下面的

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

python裡面沒有重載吧?

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

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/247981.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:24
下一篇 2024-12-12 13:24

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論