定義一個函數(shù)就是定義一個方法,self是自身,調(diào)用的時候如果需要傳入魔法方法__init__(初始定義的值【也就是參數(shù)】)時就需要帶self,不需要則可以在函數(shù)(即方法)前加修飾@staticmethod,就不用帶self參數(shù)了。
創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)品牌建設與網(wǎng)絡營銷,包括網(wǎng)站設計制作、成都網(wǎng)站建設、SEO優(yōu)化、網(wǎng)絡推廣、整站優(yōu)化營銷策劃推廣、電子商務、移動互聯(lián)網(wǎng)營銷等。創(chuàng)新互聯(lián)公司為不同類型的客戶提供良好的互聯(lián)網(wǎng)應用定制及解決方案,創(chuàng)新互聯(lián)公司核心團隊10年專注互聯(lián)網(wǎng)開發(fā),積累了豐富的網(wǎng)站經(jīng)驗,為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設服務,在網(wǎng)站建設行業(yè)內(nèi)樹立了良好口碑。
在Python中,對這兩個東西有明確的規(guī)定:
函數(shù)function —— A series of statements which returns some value to a caller. It can also be passed zero or more arguments which may be used in the execution of the body.
方法method —— A function which is defined inside a class body. If called as an attribute of an instance of that class, the method will get the instance object as its first argument (which is usually called self).
從定義的角度上看,我們知道函數(shù)(function)就相當于一個數(shù)學公式,它理論上不與其它東西關系,它只需要相關的參數(shù)就可以。所以普通的在module中定義的稱謂函數(shù)是很有道理的。
那么方法的意思就很明確了,它是與某個對象相互關聯(lián)的,也就是說它的實現(xiàn)與某個對象有關聯(lián)關系。這就是方法。雖然它的定義方式和函數(shù)是一樣的。也就是說,在Class定義的函數(shù)就是方法。
從上面的角度看似乎很有道理。
def fun():
pass
type(fun)
class 'function' #沒有問題
class Cla():
def fun():
pass
@classmethod
def fun1(cls):
pass
@staticmethod
def fun2():
pass
i=Cla()
Cla.fun.__class__
class 'function' #為什么還是函數(shù)
i.fun.__class__ #這個還像話
class 'method'
type(Cla.fun1)
class 'method' #這里又是方法
type(i.fun1)
class 'method'#這里仍然是方法
type(Cla.fun2)
class 'function'?。_@里卻是函數(shù)
type(i.fun2)
class 'function'#這里卻是函數(shù)
事實上,上面的結果是可以解釋的:
1,普通方法(老版中直接就是"instancemethod")在module中與在Class中定義的普通函數(shù),從其本身而言是沒有什么區(qū)別的,他們都是對象函數(shù)屬性。 之所以會被說在Class中的定義的函數(shù)被稱為方法,是因為它本來就是面向?qū)淼膶嵗龑ο蟮?,其實他們就是實例方法,這些方法是與實例相聯(lián)系的(從實例出發(fā)訪問該函數(shù)會自動賦值)。所以你從Class訪問仍然是一個函數(shù)
2,類方法("classmethod"),因為類同樣是對象,所以如果函數(shù)與類進行聯(lián)系了話(與實例方法一樣的模式)那么就能夠這么說了!
3,靜態(tài)方法,雖然定義在內(nèi)部,并且也較方法,但是卻不與任何對象聯(lián)系,與從類訪問方法是一樣的,他們?nèi)匀皇呛瘮?shù)。
這樣看來上面的定義可以改改了:
函數(shù)的定義自然不變。
方法的定義可以是這樣的,與某個對象進行綁定使用的函數(shù)。注意哦。綁定不是指" . "這個符號,這個符號說實在的只有域名的作用。綁定在這里是指,會默認賦值該綁定的對象。
類,class,用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。
函數(shù),是組織好的,可重復使用的,用來實現(xiàn)單一,或相關聯(lián)功能的代碼段。
函數(shù)能提高應用的模塊性,和代碼的重復利用率。你已經(jīng)知道python提供了許多內(nèi)建函數(shù),比如print()。但你也可以自己創(chuàng)建函數(shù),這被叫作用戶自定義函數(shù)。
python語言中類和函數(shù)的區(qū)別
1、規(guī)則不同
類是一種引用數(shù)據(jù)類型,類似于byte、short、int(char)、long、float、double等基本數(shù)據(jù)類型;
函數(shù)必須聲明后才可以被調(diào)用,調(diào)用格式為:函數(shù)名(實參)調(diào)用時函數(shù)名后的小括號中的實參必須和聲明函數(shù)時的函數(shù)括號中的形參個數(shù)相同。
2、主體不同
類是面向?qū)ο蟪绦蛟O計實現(xiàn)信息封裝的基礎;
函數(shù)是指一段在一起的、可以做某一件事的子程序。
3、特點不同
類是一種用戶定義的引用數(shù)據(jù)類型,也稱類類型,每個類包含數(shù)據(jù)說明和一組操作數(shù)據(jù)或者傳遞消息的函數(shù),類的實例稱為對象;
函數(shù)分為全局函數(shù)、全局靜態(tài)函數(shù),在類中還可以定義構造函數(shù)、析構函數(shù)、拷貝構造函數(shù)、成員函數(shù)、友元函數(shù)、運算符重載函數(shù)、內(nèi)聯(lián)函數(shù)等。
1、函數(shù)定義
①使用def關鍵字定義函數(shù)
②
def 函數(shù)名(參數(shù)1.參數(shù)2.參數(shù)3...):
"""文檔字符串,docstring,用來說明函數(shù)的作用"""
#函數(shù)體
return 表達式
注釋的作用:說明函數(shù)是做什么的,函數(shù)有什么功能。
③遇到冒號要縮進,冒號后面所有的縮進的代碼塊構成了函數(shù)體,描述了函數(shù)是做什么的,即函數(shù)的功能是什么。Python函數(shù)的本質(zhì)與數(shù)學中的函數(shù)的本質(zhì)是一致的。
2、函數(shù)調(diào)用
①函數(shù)必須先定義,才能調(diào)用,否則會報錯。
②無參數(shù)時函數(shù)的調(diào)用:函數(shù)名(),有參數(shù)時函數(shù)的調(diào)用:函數(shù)名(參數(shù)1.參數(shù)2.……)
③不要在定義函數(shù)的時候在函數(shù)體里面調(diào)用本身,否則會出不來,陷入循環(huán)調(diào)用。
④函數(shù)需要調(diào)用函數(shù)體才會被執(zhí)行,單純的只是定義函數(shù)是不會被執(zhí)行的。
⑤Debug工具中Step into進入到調(diào)用的函數(shù)里,Step Into My Code進入到調(diào)用的模塊里函數(shù)。
本文名稱:python方法和函數(shù) python方法和函數(shù)的區(qū)別知乎
標題路徑:http://muchs.cn/article22/doedgcc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、、域名注冊、網(wǎng)站設計、App開發(fā)、網(wǎng)站維護
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)