1. 程式人生 > >Python不支持函數重載

Python不支持函數重載

問題 類型 python quest 變參 對象 方式 ref 調用

函數重載與Python:

函數重載的好處就是不用為了不同的參數類型或參數個數,而寫多個函數。多個函數用同一個名字,但參數表,即參數的個數和數據類型可以不同。調用的時候,雖然方法名字相同,但根據參數表可以自動調用對應的函數。在靜態語言中,方法重載是希望類可以以統一的方式處理不同類型的數據提供了可能。而在動態語言中,有鴨子類型,即如果走起來像鴨子,叫起來也像鴨子,那麽它就是鴨子。一個對象的特征不是由它的類型決定,而是通過對象中的方法決定,所以函數重載在動態語言中就顯得沒有意義了。

為了考慮為什麽 python 不提供函數重載,首先我們要研究為什麽需要提供函數重載。

函數重載主要是為了解決兩個問題。
1。可變參數類型。
2。可變參數個數。

另外,一個基本的設計原則是,僅僅當兩個函數除了參數類型和參數個數不同以外,其功能是完全相同的,此時才使用函數重載,如果兩個函數的功能其實不同,那麽不應當使用重載,而應當使用一個名字不同的函數。

好吧,那麽對於情況 1 ,函數功能相同,但是參數類型不同,python 如何處理?答案是根本不需要處理,因為 python 可以接受任何類型的參數,如果函數的功能相同,那麽不同的參數類型在 python 中很可能是相同的代碼,沒有必要做成兩個不同函數。

那麽對於情況 2 ,函數功能相同,但參數個數不同,python 如何處理?大家知道,答案就是缺省參數。對那些缺少的參數設定為缺省參數即可解決問題。因為你假設函數功能相同,那麽那些缺少的參數終歸是需要用的。

好了,鑒於情況 1 跟 情況 2 都有了解決方案,python 自然就不需要函數重載了。

以上引自知乎:http://www.zhihu.com/question/20053359

Python不支持函數重載