什麼是函數?shell
函數是抽象出的一組執行特定功能的重複代碼,通俗理解,就是對一些重複的工做進行封裝和而後直接調用,避免重複造輪子。數組
Python中的函數如何定義?函數
使用def關鍵字,結構以下:ui
def 函數名(參數列表):
函數體
return語句(可省略)
其中return 語句表示函數的結束,在函數內部return語句後的語句不會執行,return關鍵字後面客戶以跟變量,表達式等表示向函數調用方的返回值,也能夠不加變量或者直接省略return語句,表示向函數調用方返回None對象。spa
函數如何調用?code
調用方法:函數名加括號,括號裏傳入參數列表,以下所示:對象
def fun(a): print(a)
執行結果
>>> fun(3)
3blog
函數的參數有幾種類型?ci
函數的參數按照傳入的要求和數量、類型的不一樣,通常分爲如下幾種:it
1.位置參數(必選參數)
def fun(arg1,arg2,arg3): pass
位置參數是最多見的參數類型,如上圖所示,arg1,arg2,arg3是三個位置參數,顧名思義,在調用時必須嚴格按照定義的位置順序傳入參數,不然會形成結果錯誤甚至報錯。
2.默認參數
若是某個參數的值大部分狀況下都爲某一特定的值,爲調用方便,可爲其設默認值,在調用時若是該參數取默認值,可不用傳入該參數,以下所示:
def fun(name,college="NEU"): print(name,"graduated from",college)
執行結果
>>> fun("I")
I graduated from NEU
注意:
函數定義時,默認參數必須在必須參數(沒有默認值的)以後,
默認參數必須指向不可變對象(即爲其賦的值必須是不可變對象),纔可保證每次執行時默認參數的值相同。
默認參數能夠簡化函數的調用,也可提升函數更新(增長新參數)後的向下兼容性,即爲新增長的參數設置默認值從而不用改寫原來函數的調用方式。
3.可變參數
"可變」指的是傳入的參數個數可變,可變參數在定義時使用" *args "(args可改成任意變量名),調用時可傳入任意數量的參數,會自動組裝成元組,由args變量名指向。以下所示:
def fun(*args): print(agrs) 執行結果 >>> fun(1,2,3) (1, 2, 3)
4.關鍵字參數
所謂關鍵字參數,即爲在傳入時必須指明參數名和參數值,即以「參數名=值 」的形式傳入參數
和可變參數相似,關鍵字參數支持傳入任意個數的參數,區別是傳入的必須是關鍵字參數,在執行時於自動將傳入的關鍵字參數組裝成字典,關鍵字參數在定義時使用" **kwargs " 亦可換成其餘變量名,指向組裝好的字典),以下所示:
def fun(**kwargs): print(kwargs) 執行結果 >>> fun(a=1,b=2) {'a': 1, 'b': 2}
5.命名關鍵字參數
關鍵字參數不會限制關鍵字參數的名字,不利於參數名的檢查,命名關鍵字能指定傳入的關鍵字參數的名稱,若是傳入得關鍵字參數名稱不符,將會報錯。和關鍵字參數**kw
不一樣,命名關鍵字參數須要一個特殊分隔符*
,*
後面的參數被視爲命名關鍵字參數。定義的格式爲「*,參數名1,參數名2「。以下所示:
def fun(*,a,b): print("success") >>> fun() Traceback (most recent call last): File "<pyshell#9>", line 1, in <module> fun() TypeError: fun() missing 2 required keyword-only arguments: 'a' and 'b' >>> fun(a=1) Traceback (most recent call last): File "<pyshell#10>", line 1, in <module> fun(a=1) TypeError: fun() missing 1 required keyword-only argument: 'b' >>> fun(a=1,b=2) success
若是函數定義中已經有了一個可變參數,後面跟着的命名關鍵字參數就再也不須要一個特殊分隔符*
了(命名關鍵字在定義時亦可設默認值):
def person(name, age, *args, city, job="SE"): print(name, age, args, city, job)
以上幾種參數在函數定義時,按何種順序?
參數定義的順序必須是:必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數。
函數和方法的區別?
函數和方法本質上沒有不一樣,通常來講類中定義的函數叫方法,其餘狀況下都叫函數。