函式過載主要是為了解決兩個問題。
(1)可變引數型別。
(2) 可變引數個數。
另外,乙個基本的設計原則是,僅僅當兩個函式除了引數型別和引數個數不同以外,其功能是完全相同的,此時才使用函式過載,如果兩個函式的功能其實不同,那麼不應當使用過載,而應當使用乙個名字不同的函式。
好吧,那麼對於情況 (1),函式功能相同,但是引數型別不同,python 如何處理?答案是根本不需要處理,因為 python 可以接受任何型別的引數,如果函式的功能相同,那麼不同的引數型別在 python 中很可能是相同的**,沒有必要做成兩個不同函式。
那麼對於情況 (2),函式功能相同,但引數個數不同,python 如何處理?答案就是預設引數。對那些缺少的引數設定為預設引數即可解決問題。因為你假設函式功能相同,那麼那些缺少的引數終歸是需要用的。
好了,鑑於情況 (1) 跟 情況 (2) 都有了解決方案,python 自然就不需要函式過載了。
這裡順便說一下python中引數傳遞時候的*arg和**args,看幾個小栗子就一清二楚了:
第乙個小栗子:
1附上結果:def test1(farg,*args):
2print ("
farg:
",farg)
3for value in
args:
4print ("
args:
",value)
56 test1(1,"
two",3,"
4")
第二個小栗子:
1結果:def test2(farg,**args):
2print ("
farg:
",farg)
3for key in
args:
4print ("
key:%s values:%s
"%(key,args[key]))
下面的例子更加清晰,定義的時候 * 的作用 將位置實參 裝配成元組,
**的作用 將關鍵字實參 裝配成字典
下面的例子是呼叫的時候 * 的作用將元組或列表 打散成位置引數進行引數傳遞,** 的作用將字典打散成關鍵字引數進行引數傳遞
下面
1簡單來說,python中為什麼不需要過載,過載要解決的是引數型別和引數個數的問題,對於型別,python不像是c語言整型要寫int,字串要寫str,,,這些python都不需要。
那麼需要解決的就是傳遞引數個數問題,此時python可以傳遞列表呀,字典呀,可以使用*arg和**args呀,所以python根本不需要過載。
最近感覺自己特別懶,尤其懶,可是剛剛畢業沒有什麼工作經驗,必須要一點一點的積累。竟然出現被一塊石頭絆倒兩次的情況,也是服了自己了。。。
唉,感覺自己不是自己了
簡單簡單
python為什麼不需要swap a,b
關鍵字 python swap 致 謝 這是一篇譯稿,原作者是一位nasa的程式設計師,非常感謝他在python社群及時 詳細的為我解答了問題,並在講解中解說了一些python的相關知 識,還寬容的對待我蹩腳的英語。感謝他同意我將他的來信介紹給大家。這是一位謙和有禮又博學多才的朋友。他幫我理解pyt...
python不需要過載的原因
函式過載主要是為了解決兩個問題。1 可變引數型別。2 可變引數個數。另外,乙個基本的設計原則是,僅僅當兩個函式除了引數型別和引數個數不同以外,其功能是完全相同的,此時才使用函式過載,如果兩個函式的功能其實不同,那麼不應當使用過載,而應當使用乙個名字不同的函式。好吧,那麼對於情況 1 函式功能相同,但...
為什麼 Linux 不需要碎片整理
想要知道為什麼在正常使用中,linux檔案系統不需要進行碎片整理,而windows要。你需要了解為什麼會生成碎片,而linux和windows這兩個檔案系統,它們分別是如何工作的。什麼是碎片 許多windows使用者,即使沒有太多經驗,我相信他們也會定期進行碎片整理,來加速其電腦。為什麼要這麼做,許...