小結(jié)
Python的函數(shù)具有非常靈活的參數(shù)形態(tài)糊肠,既可以實(shí)現(xiàn)簡單的調(diào)用,又可以傳入非常復(fù)雜的參數(shù)遗锣。
默認(rèn)參數(shù)一定要用不可變對象货裹,如果是可變對象,程序運(yùn)行時(shí)會有邏輯錯誤精偿!
要注意定義可變參數(shù)和關(guān)鍵字參數(shù)的語法:
*args是可變參數(shù)泪酱,args接收的是一個(gè)tuple;
**kw是關(guān)鍵字參數(shù),kw接收的是一個(gè)dict墓阀。
以及調(diào)用函數(shù)時(shí)如何傳入可變參數(shù)和關(guān)鍵字參數(shù)的語法:
可變參數(shù)既可以直接傳入:func(1, 2, 3)毡惜,又可以先組裝list或tuple,再通過args傳入:func((1, 2, 3))斯撮;
關(guān)鍵字參數(shù)既可以直接傳入:func(a=1, b=2)经伙,又可以先組裝dict,再通過kw傳入:func({'a': 1, 'b': 2})勿锅。
使用args和*kw是Python的習(xí)慣寫法帕膜,當(dāng)然也可以用其他參數(shù)名,但最好使用習(xí)慣用法溢十。
命名的關(guān)鍵字參數(shù)是為了限制調(diào)用者可以傳入的參數(shù)名垮刹,同時(shí)可以提供默認(rèn)值。
定義命名的關(guān)鍵字參數(shù)在沒有可變參數(shù)的情況下不要忘了寫分隔符*张弛,否則定義的將是位置參數(shù)荒典。
遞歸函數(shù)的小結(jié):
使用遞歸函數(shù)的優(yōu)點(diǎn)是邏輯簡單清晰霎烙,缺點(diǎn)是過深的調(diào)用會導(dǎo)致棧溢出逗栽。
針對尾遞歸優(yōu)化的語言可以通過尾遞歸防止棧溢出伐厌。尾遞歸事實(shí)上和循環(huán)是等價(jià)的呈昔,沒有循環(huán)語句的編程語言只能通過尾遞歸實(shí)現(xiàn)循環(huán)廊佩。
Python標(biāo)準(zhǔn)的解釋器沒有針對尾遞歸做優(yōu)化剔应,任何遞歸函數(shù)都存在棧溢出的問題号坡。