點(dian)評:C++、Java、C#等諸多編程(cheng)語言都支(zhi)持(chi)函(han)數(shu)重載,所謂函(han)數(shu)重載指的(de)是在(zai)同一(yi)個(ge)作(zuo)用(yong)域中有多個(ge)同名函(han)數(shu),它(ta)們擁有不(bu)(bu)同的(de)參數(shu)列(lie)表(參數(shu)個(ge)數(shu)不(bu)(bu)同或參數(shu)類型不(bu)(bu)同或二者皆不(bu)(bu)同),可(ke)以相互區(qu)分。
重(zhong)載(zai)(zai)也是一種多態(tai)性,因為通常(chang)是在編譯(yi)時通過(guo)參數(shu)(shu)的個(ge)(ge)數(shu)(shu)和(he)類型來確定到底調用哪個(ge)(ge)重(zhong)載(zai)(zai)函(han)數(shu)(shu),所(suo)以也被稱為編譯(yi)時多態(tai)性或者叫(jiao)前綁定。
這個問(wen)題的(de)(de)潛臺(tai)詞其實是(shi)問(wen)面(mian)試者(zhe)是(shi)否有其他編程(cheng)語言(yan)的(de)(de)經驗,是(shi)否理解Python是(shi)動態(tai)類型語言(yan),是(shi)否知(zhi)道Python中函數的(de)(de)可變(bian)參(can)數、關鍵字參(can)數這些概念。
首先Python是解釋型語言,函數(shu)重載現象通(tong)常出現在編(bian)譯型語言中。
其次Python是動態類型語言(yan),函數的參數沒有類型約束,也(ye)就無法根(gen)據(ju)參數類型來(lai)區(qu)分重載。
再者Python中(zhong)函數(shu)的參(can)數(shu)可(ke)以(yi)有(you)(you)默認值,可(ke)以(yi)使用(yong)可(ke)變參(can)數(shu)和關(guan)鍵字(zi)參(can)數(shu),因此即(ji)便沒有(you)(you)函數(shu)重(zhong)載,也要(yao)可(ke)以(yi)讓一(yi)個函數(shu)根(gen)據調用(yong)者傳入的參(can)數(shu)產生不同的行為(wei)。