python中函式和方法的區別
本篇內容主要介紹從幾個維度來介紹下python中函式和方法的區別:
首先,從分類的角度來分析。
(1)函式的分類:
- 內建函式:python內嵌的一些函式。
- 匿名函式:一行程式碼實現一個函式功能。
- 遞迴函式
- 自定義函式:根據自己的需求,來進行定義函式。
(2)方法的分類:
- 普通方法:直接用self呼叫的方法。
- 私有方法:__函式名,只能在類中被呼叫的方法。
- 屬性方法:@property,將方法偽裝成為屬性,讓程式碼看起來更合理。
- 特殊方法(雙下劃線方法):以__init__為例,是用來封裝例項化物件的屬性, 只要是例項化物件就一定會執行__init方法 ,如果物件子類中沒有則會尋找父類(超類),如果父類(超類)也沒有,則直接繼承object(python 3.x)類,執行類中的__init__方法。
- 類方法:通過類名的呼叫去操作公共模板中的屬性和方法。
- 靜態方法:不用傳入類空間、物件的方法, 作用是保證程式碼的一致性,規範性,可以完全獨立類外的一個方法,但是為了程式碼的一致性統一的放到某個模組(py檔案)中。
其次,從作用域的角度來分析:
(1)函式作用域:從函式呼叫開始至函式執行完成,返回給呼叫者後,在執行過程中開闢的空間 會自動釋放 ,也就是說函式執行完成後,函式體內部通過賦值等方式修改變數的值不會保留,會隨著返回給呼叫者後,開闢的空間會自動釋放。
(2)方法作用域:通過例項化的物件進行方法的呼叫,呼叫後開闢的空間 不會釋放 ,也就是說呼叫方法中對變數的修改值會一直保留。
最後,呼叫的方式不同。
(1)函式:通過“函式名()”的方式進行呼叫。
(2)方法:通過“物件.方法名”的方式進行呼叫。
class Foo(object): def func(self): pass #例項化 obj = Foo() # 執行方式一:呼叫的func是方法 obj.func() #func 方法 # 執行方式二:呼叫的func是函式 Foo.func(123) # 函式