Python中定義的函數可以使用必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數,使用的順序也服從上述排列。
1-必選參數
def func(x):
print(x)
2-默認參數
def func(x,n = 2):
print(x,n)
調用時:
>>>func(20)
20 2
>>>func(20,5)
20 5
3-可變參數
def func(*value):
print(value)
可變參數,顧名思義就是可以傳入0-任意個參數,也可以傳入一個list或tuple
調用:
>>>func(1,2,3)
1 2 3
>>>b = [1,2,3]
>>>func(*b)
1 2 3
4-關鍵字參數
關鍵字參數與可變參數可以說大部分一樣,不同的是可變參數會將傳入的參數組裝成list,而關鍵字參數會將傳入的參數組裝成dict
def func(n,**dict):
print(n,dict)
調用
>>>func(12,x='1',y='2')
12 {'x':'1',y':'2'}
>>>dic = {'x':'1','y':'2'}
>>>func(12,**dic)
12 {'x':'1',y':'2'}
5-命名關鍵字參數
命名關鍵字參數的作用是限制傳入的關鍵字參數,也就是說你只能輸入特殊固定的鍵值對,如果函數定義中有可變參數,那麼命名關鍵字參數緊跟其後,如果沒有可變參數,需要增加一個 ,*,來區分位置參數和關鍵字參數
def func(x,y,*,height,width): #限制只傳入key = height和width
print(x,y,height,width)
Tips
1-默認參數必須指向不變對象;(list是可變對象)
原因:函數在定義的時候默認參數的值就已經是個佔用內存的變量了,函數被調用時,如果默認參數是可變的list,那麼在每次調用函數之後默認參數的值都會發生改變。
Eg.
def add_list(l =[]): #傳入的默認參數是可變參數list
l.append('end')
print(l)
可以這樣修改:
def add_list(l = None): #將默認參數置爲None不可變參數
if l is None: #如果選擇使用默認參數,就置爲list
l = []
l.append('end')
print(l)