參數(shù)類(lèi)別
實(shí)參:實(shí)際上的參數(shù)
形參:形式上的參數(shù)
如上圖,實(shí)際輸入的參數(shù)為實(shí)參,在函數(shù)中占位置的參數(shù)為形參。
實(shí)參類(lèi)型
1、位置實(shí)參
定義:調(diào)用的時(shí)候,需要根據(jù)位置傳遞實(shí)際參數(shù)
如圖,Lion / Dog占了兩個(gè)位置,期望是傳遞實(shí)參建議按照這個(gè)順序,不然,即時(shí)能夠接受,也不能正確的處理。(Lion的名字跟Dog的名字,因?yàn)閭鬟f錯(cuò)誤,將導(dǎo)致不能正確識(shí)別)
2、關(guān)鍵字實(shí)參
定義:調(diào)用的時(shí)候,需要指定形參名稱(chēng)
如圖,在調(diào)用的時(shí)候直接賦值,這種傳遞方式一目了然。
3、默認(rèn)值實(shí)參
定義:在函數(shù)中,直接賦值給參數(shù)
如圖,直接在函數(shù)定義一個(gè)默認(rèn)值,在調(diào)用的時(shí)候,可以不傳遞,當(dāng)然也可以傳遞。
形參類(lèi)型
形參類(lèi)型分為非關(guān)鍵字形參*args, 關(guān)鍵字形參**kwargs,先上代碼體驗(yàn)一下,:
def func(*args, **kwargs):
print("-------------------------")
print('args is {}'.format(args))
print('kwarg is {}'.format(kwargs))
try:
print('firstArgs is {}'.format(args[0]))
print('firstKwarg is {}'.format(kwargs["a"]))
except:
pass
if __name__ == "__main__":
func(1, 2) # 元組
func(a=1, b=2, c=3, d=4) # 字典
func(1, 2, a=1, b=2) # 元組+字典
如上,我們了解了非關(guān)鍵字形參*args, 關(guān)鍵字形參**kwargs的用法。
非關(guān)鍵字形參:用于接收不含關(guān)鍵字的輸入數(shù)據(jù)(如:1,2,3),會(huì)以元組的形式進(jìn)入函數(shù);
非關(guān)鍵字形參:用于接收含有關(guān)鍵字的輸入數(shù)據(jù)(如:key=1中的key),會(huì)以字典的形式進(jìn)入函數(shù);
注意事項(xiàng):
1、*args, **kwargs可單獨(dú)存在
2、*args, **kwargs同時(shí)存在時(shí),函數(shù)定義的形參,*args形參必須在前
3、*args, **kwargs同時(shí)存在時(shí),傳遞實(shí)參的順序,*args實(shí)參必須在前
4、取值方式:
*args可通過(guò)列表取值方式,如:args[0]
**kwargs可通過(guò)字典取值方式,如:kwargs[“key”]
5、參數(shù)擴(kuò)展:可以跟普通形參一起使用,如:func(a,b,c=“name”,*args, **kwargs)