【代碼世界 No.5】Python筆記#4 - 函數(shù)及裝飾器
關(guān)于Python函數(shù)
函數(shù)(function)?是一種具有特定功能的代碼塊,如果有大量需要重復(fù)使用的功能,可以通過定義函數(shù)來快速實(shí)現(xiàn),能夠精簡代碼,提高效率。
函數(shù)體的形式在定義?類Class?時(shí)是相同的,只是類中的函數(shù)被稱為“方法”。
函數(shù)的定義
函數(shù)結(jié)構(gòu)形式如下:

def 是函數(shù)的標(biāo)識(shí),func是自定義的函數(shù)名稱,arg是函數(shù)的輸入形參(可以沒有),return 表示函數(shù)返回值,即函數(shù)體執(zhí)行完后得到的值,也可以沒有返回值。
其中函數(shù)名后面的()和 冒號(hào)是必須要有的。
函數(shù)的輸入?yún)?shù)
在定義函數(shù)時(shí),函數(shù)名后的()中可按照需要,寫入?yún)?shù)或參數(shù)列表作為函數(shù)的形參,參與到函數(shù)體代碼的計(jì)算中,而在調(diào)用該函數(shù)時(shí),講實(shí)際需要計(jì)算的實(shí)參填入括號(hào)中即可調(diào)用函數(shù)了。

如果函數(shù)執(zhí)行的時(shí)候不需要參數(shù),那么在定義和調(diào)用中都不需要填寫參數(shù)。
而且參數(shù)可以是多種形式,例如字符串、數(shù)字、列表、對(duì)象等,只需要保證輸入的實(shí)參和形參類型對(duì)應(yīng)即可。
關(guān)鍵字參數(shù)
在上面的ex.1中調(diào)用函數(shù)的時(shí)候,兩個(gè)實(shí)參位置順序是確定的,即1代替形參a, 2代替形參b。如果不想對(duì)順序有太多要求的,可以使用關(guān)鍵字參數(shù),即在調(diào)用的時(shí)候直接指明了實(shí)參要指代哪一個(gè)形參,如ex.2.

可變參數(shù)
在定義函數(shù)的時(shí)候,如果不確定參數(shù)有多少個(gè),可以在前面加個(gè)* 號(hào),用來存放所有未命名的參數(shù),如果沒有參數(shù),則建立一個(gè)空元組
也可用兩個(gè)星號(hào)** 來標(biāo)定可變參數(shù),表明可變參數(shù)是字典元素,這時(shí)調(diào)用函數(shù)則需要采用如“arg1=value1,arg2=value2”這樣的形式(kwargs是key value arguments的簡寫)。在調(diào)用時(shí),參數(shù)必須成對(duì)出現(xiàn),并用等號(hào)區(qū)分鍵和值,而不能用傳統(tǒng)的參數(shù)賦值方式,如func(1,3)。


函數(shù)的返回
經(jīng)過函數(shù)計(jì)算后,將結(jié)果返回使用return即可,這里返回的類型也包含列表、對(duì)象等多種形式,可以在調(diào)用或遞歸的時(shí)候反復(fù)傳值使用。
另外,函數(shù)可以返回多個(gè)值,例如:

可以看到,利用return返回了多個(gè)結(jié)果,但是需要注意的是,實(shí)際上返回的時(shí)候其實(shí)還是一個(gè)結(jié)果(元組),只是在調(diào)用時(shí),python自動(dòng)解包出來其中的元素,所以像是返回了多個(gè)值。
編寫函數(shù)文檔
定義函數(shù)之后,最好加上注釋,這樣當(dāng)項(xiàng)目復(fù)雜的時(shí)候便于查看,增加函數(shù)注釋的方式是在def行之后 用?塊注釋的方法注明,然后就能通過的方式快速查看了,如下:

匿名函數(shù)
這是類特殊的函數(shù),即lambda函數(shù),之所以叫匿名函數(shù),就是沒有名字,可以理解為用后即焚,用法如下:

函數(shù)裝飾器
裝飾器其實(shí)是一個(gè)閉包,本質(zhì)上是一個(gè)返回函數(shù)的函數(shù),用來對(duì)一個(gè)函數(shù)進(jìn)行修飾或增加功能而避免對(duì)原函數(shù)的破壞具體見下。



? ?以上是關(guān)于Python函數(shù)的一些介紹和自己在使用中的一些心得記錄,供自己查閱也分享給一同學(xué)習(xí)的朋友,如有不恰當(dāng)或錯(cuò)誤之處,歡迎留言交流,謝謝~