什么是函數?
函數是抽象出的一組執行特定功能的重復代碼,通俗理解,就是對一些重復的工作進行封裝和然后直接調用,避免重復造輪子。
Python中的函數如何定義?
使用def關鍵字,結構如下:
def 函數名(參數列表):
函數體
return語句(可省略)
其中return 語句表示函數的結束,在函數內部return語句后的語句不會執行,return關鍵字后面客戶以跟變量,表達式等表示向函數調用方的返回值,也可以不加變量或者直接省略return語句,表示向函數調用方返回None對象。
函數如何調用?
調用方法:函數名加括號,括號里傳入參數列表,如下所示:
def fun(a): print(a)
執行結果
>>> fun(3)
3
函數的參數有幾種類型?
函數的參數按照傳入的要求和數量、類型的不同,一般分為以下幾種:
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)
以上幾種參數在函數定義時,按何種順序?
參數定義的順序必須是:必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數。
函數和方法的區別?
函數和方法本質上沒有不同,一般來說類中定義的函數叫方法,其他情況下都叫函數。