函數相當於接口,當完成一個函數的定義時,函數的內部相當於已經封裝起來了,調用者只需要知道如何正確的傳遞函數的參數,函數會返回什麼樣的值。
python中,函數的定義一律採用def開頭,後面加函數名,函數名後面的參數確實相當靈活,也是調用者需要理解透徹的。python中函數的參數歸納爲一下4種定義方式
1.必選參數
該參數就是我們在C語言中常用的傳遞給函數的參數,不做過多說明
2.默認參數
該參數類似於C/C++中的缺省值,用於必選參數之後,可降低函數調用的複雜度。調用的時候,調用者也可進行相應的修改,否則就當做是默認值
ex.
def fun(name,age=20,language='python');
print 'name:',name
print 'age:',age
print 'language:',language
其中name爲必選參數,調用者必須傳值,age和language爲默認參數,調用時可以進行修改,也可以使用默認值,若發生修改則按順序修改參數,如:
>>fun('zhangsan','30')
print name:zhangsan
print age:30
print language:python
定義默認參數時的誤區—>>>>默認參數必須要指向不變的對象!!!原因很簡單:默認參數會隨着函數的不斷調用發生變化
3.可變參數(“*args”)
顧名思義,可變參數允許調用者傳入0個或任意多個參數,這些參數時沒有參數名的,這些傳進來的參數會以tuple的形式訪問,往往以“*”的形式定義
ex.
可以看到可變參數的訪問形式和定義方式,可變參數主要用於有時函數定義的時候預先不知道要接受多少參數時使用
4.關鍵字參數(“**kw”)
參考可變參數,但其訪問形式爲一個dict,而且這些參數在調用者傳參時是有參數名的
ex.
可以看到關鍵字參數的訪問形式和定義,關鍵字參數在函數的調用中起着擴展函數的功能
---------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------
當這些參數組合使用時,又會發生什麼???
ex.
結論:在函數調用的時候,Python解釋器會自動按照參數的位置和參數名將對應的參數傳遞進去
匹配順序:
1.先位置匹配;
2.關鍵字匹配;
3.收集匹配中的元組參數;
4.收集匹配中的關鍵字參數