一、位置參數
函數調用時根據函數定義的參數位(形參)置來傳遞參數
示例:
1 #-*- coding:utf-8 -*- 2 3 def msg(name,age): 4 print("Hello,your name is %s,your age is %s"%(name,age)) 5 msg('root',12)
位置參數必須一一對應,缺一不可
二、關鍵字參數
在函數調用時,通過‘鍵--值’方式為函數形參傳值,不用按照位置為函數形參傳值。
注意:
- 關鍵字參數必須在位置參數右邊
- 對同一個形參不能重復傳值
正確示例:
1 # #-*- coding:utf-8 -*- 2 # 3 # 按照順序為函數形參傳值 4 # def msg(name,age,sex): 5 # print("Hello,your name is %s,age is %s,sex is %s"%(name,age,sex)) 6 # msg('root',12,'男') 7 8 #有位置參數和關鍵字參數時,關鍵字參數要放在位置參數后面 9 # def msg(name,age,sex): 10 # print("Hello,your name is %s,age is %s,sex is %s"%(name,age,sex)) 11 # msg('root',12,sex= '男') 12 13 # 參數中有多個關鍵字參數時,關鍵字參數不分先后順序 14 # def msg(name,age,sex): 15 # print("Hello,your name is %s,age is %s,sex is %s"%(name,age,sex)) 16 # msg('root',sex= '男',age= 22)
錯誤示例:
1 # 關鍵字參數放在了位置參數的前面 2 # def msg(name,age,sex): 3 # print("Hello,your name is %s,age is %s,sex is %s"%(name,age,sex)) 4 # msg(name='root',22,'男') 5 6 # def msg(name,age,sex): 7 # print("Hello,your name is %s,age is %s,sex is %s"%(name,age,sex)) 8 # msg('root',age=12,'男')
三、默認參數
在定義函數時,可以為形參提供默認值。對於有默認值的形參,調用函數時如果為該參數傳值,則使用傳入的值,否則使用默認值。
注意:
- 在調用函數時可以不給有默認值的形參傳值
- 無論是函數的定義還是調用,默認參數的定義應該在位置形參右面
- 只在定義時賦值一次
- 默認參數通常應該定義成不可變類型
示例:
def msg(name,age,sex='男'): #默認參數在關鍵字參數后面
...
def test(x,y=2):
print(x)
print(y)
test(2) #只給一個參數傳值,則另外一個使用默認值
四、非固定參數
當函數定義時不確定要傳入多少個實參時,就可以使用非固定參數。而實參有按位置和按關鍵字兩種形式定義,針對這兩種形式的可變長,形參對應有兩種解決方案來完整地存放它們,分別是*args,**kwargs
- *args 接收的是實參,位置參數,將轉化成元祖返回
def test(*args): print(args) test(1,2,3,4,5)
運行結果:
(1, 2, 3, 4, 5)def test1(x,*args): print(x) print(args) test1(1,2,3,4,5)
運行結果:1
(2, 3, 4, 5) - *kwargs 接收的是實參,關鍵字參數,將轉化成字典返回
def func(a,b,**kwargs): print(a,b,kwargs) func(a = 10,b = 20,cc = 30,dd = 40)
運行結果:
10 20 {'cc': 30, 'dd': 40}參數定義順序:位置參數->*args->默認參數->**kwargs