點(diǎn)評:C++、Java、C#等諸多編程語言都支持函數(shù)重載,所謂函數(shù)重載指的是在同一個作用域中有多個同名函數(shù),它們擁有不同的參數(shù)列表(參數(shù)個數(shù)不同或參數(shù)類型不同或二者皆不同),可以相互區(qū)分。
重載也是一種多態(tài)性,因?yàn)橥ǔJ窃诰幾g時通過參數(shù)的個數(shù)和類型來確定到底調(diào)用哪個重載函數(shù),所以也被稱為編譯時多態(tài)性或者叫前綁定。
這個問題的潛臺詞其實(shí)是問面試者是否有其他編程語言的經(jīng)驗(yàn),是否理解Python是動態(tài)類型語言,是否知道Python中函數(shù)的可變參數(shù)、關(guān)鍵字參數(shù)這些概念。
首先Python是解釋型語言,函數(shù)重載現(xiàn)象通常出現(xiàn)在編譯型語言中。
其次Python是動態(tài)類型語言,函數(shù)的參數(shù)沒有類型約束,也就無法根據(jù)參數(shù)類型來區(qū)分重載。
再者Python中函數(shù)的參數(shù)可以有默認(rèn)值,可以使用可變參數(shù)和關(guān)鍵字參數(shù),因此即便沒有函數(shù)重載,也要可以讓一個函數(shù)根據(jù)調(diào)用者傳入的參數(shù)產(chǎn)生不同的行為。