1)默認參數power(x, n=2):,這樣,當我們調用power(5)時,相當于調用power(5, 2)。只有與默認參數不符的才需要提供額外的信息power(5,3)
2)Python函數在定義的時候,默認參數L的值就被計算出來了,即[],因為默認參數L也是一個變量,它指向對象[],每次調用該函數,如果改變了L的內容,則下次調用時,默認參數的內容就變了,不再是函數定義時的[]了,用none實現不變
if L is None:
L = []
3)定義可變參數和定義一個list或tuple參數相比,僅僅在參數前面加了一個*號
4)*nums表示把nums這個list的所有元素作為可變參數傳進去
5)**extra表示把extra這個dict的所有key-value用關鍵字參數傳入到函數的**kw參數
6)命名關鍵字參數需要一個特殊分隔符*,*后面的參數被視為命名關鍵字參數
6.1)如果函數定義中已經有了一個可變參數,后面跟著的命名關鍵字參數就不再需要一個特殊分隔符*了
6.2)*args是可變參數,args接收的是一個tuple;**kw是關鍵字參數,kw接收的是一個dict。
7)使用遞歸函數的優點是邏輯簡單清晰,缺點是過深的調用會導致棧溢出。
7.1)針對尾遞歸優化的語言可以通過尾遞歸防止棧溢出。尾遞歸事實上和循環是等價的,沒有循環語句的編程語言只能通過尾遞歸實現循環。