- Python 3.6從入門到精通(視頻教學版)
- 王英英
- 1202字
- 2019-12-06 14:20:11
6.4 函數的參數
Python函數的參數傳遞都是使用傳址調用的方式。所謂傳址調用,就是將該參數的內存地址傳過去,若參數在函數內被更改,則會影響到原有的參數。參數的數據類型可以是模塊、類、實例(instance),或者其他的函數,用戶不必在參數內設置參數的數據類型。
調用函數時可使用的參數類型包括必需參數、關鍵字參數、默認參數、可變參數和組合參數。下面分別介紹它們的使用方法和技巧。
6.4.1 必需參數
必需參數要求用戶必須以正確的順序傳入函數。調用時的數量必須和聲明時的一樣,設置函數的參數時,須依照它們的位置排列順序。例如:

運行結果如圖6-17所示。從結果可以看出,調用gg(200, 50)時,x參數等于200,y參數等于50,因為Python會根據參數排列的順序來取值。

圖6-17 運行結果
如果調用gg ()函數時沒有傳入參數或傳入參數與聲明不同,就會出現語法錯誤。例如:
>>> gg() #不輸入參數 >>> gg(100,200,300) #輸入超過兩個參數
運行結果如圖6-18所示。從結果可以看出,無論是不傳入參數還是傳入的參數多于兩個,都會提示報錯信息。第一個錯誤信息表示需要傳入x和y的值;第二個錯誤信息表示傳入的參數為三個,多于規定的兩個參數。

圖6-18 運行結果
由此可見,對于包含必需參數的函數,在傳遞參數時需要保證參數的個數正確無誤。
6.4.2 關鍵字參數
用戶可以直接設置參數的名稱及其默認值,這種類型的參數屬于關鍵字參數。
在設置函數的參數時,可以不依照它們的位置排列順序,因為Python解釋器能夠用參數名匹配參數值。例如:

運行結果如圖6-19所示。

圖6-19 運行結果
用戶可以將必需參數與關鍵字參數混合使用,但必須將必需參數放在關鍵字參數之前。例如:

運行結果如圖6-20所示。

圖6-20 運行結果
6.4.3 默認參數
調用函數時,若沒有傳遞參數,則會使用默認參數值。例如:

運行結果如圖6-21所示。

圖6-21 運行結果
在本示例中,首先定義一個函數gg( name, price=6000 ),這里變量price的默認值為6000。當第一次調用該函數時,因為指定了變量price的值為3880,所以輸出值也為3880;第二次調用該函數時,因為沒有指定變量price的值,所以結果將會輸出變量price的默認值(6000)。
當使用默認參數時,參數的位置排列順序可以任意改變。若每個參數值都定義了默認參數,則調用函數時可以不設置參數,使用函數定義時的參數默認值。

運行結果如圖6-22所示。

圖6-22 運行結果
6.4.4 可變參數
如果用戶在聲明參數時不能確定需要使用多少個參數,就使用可變參數。可變參數不用命名,其基本語法如下:

加了星號(*)的變量名會存放所有未命名的變量參數。如果在函數調用時沒有指定參數,它就是一個空元組。用戶也可以不向函數傳遞未命名的變量。
【例6.1】可變參數的綜合應用(源代碼\ch06\6.1.py)。

保存并運行程序,結果如圖6-23所示。

圖6-23 運行結果
從結果可以看出,用戶無法預定參數的數目時,可以使用*arg類型的參數,*arg代表一個元組對象。在定義函數時,只定義兩個參數,調用時可以傳入兩個以上的參數,這就是可變參數的優勢。
用戶也可以使用**arg類型的參數,**arg代表一個字典對象。
【例6.2】**arg類型的應用(源代碼\ch06\6.2.py)。

保存并運行程序,結果如圖6-24所示。

圖6-24 運行結果