前言

「自定函式」是程式設計者依需求自行定義開發設計。自行定義的函式是一段獨立的程式碼敘述集合區塊,這個敘述區塊稱為Function(函式),建立時要賦予函式名稱。在其它程式敘述只要透過呼叫該函式名稱,就可以使用該函式敘述的功能。

函式的建立

Python定義函式時,是使用def來建立函式名稱,所建立的函式可以傳入多個引數,完成函式執行時也可產生多個傳回值。建立自定函式主體的語法如下:

def 函式名稱(引數1, 引數2,... ... ):
    程式區塊
    return 傳回值1, 傳回值2,... ...
  1. 函式名稱:函式名稱的命名方式比照識別字的命名規則。在同一個程式中,自定函式的名稱不可以重複定義使用,也不可以和內建函式的名稱相同。

  2. 引數:引數又稱為參數,可以傳入一個、二個或多個,也可以不傳入引數。在此的引數稱為虛引數,是接收來自呼叫端的程式敘述傳遞過來的資料。呼叫端程式敘述傳入的資料稱為實引數。若傳入之引數是二個以上,引數間要用逗點「,」隔間開。若不傳入引數,這時引數列只留有一個空的()

  3. 傳回值:執行函式的敘述區段從事某項功能或任務時,有時會傳回一個或多個結果,這就是傳回值。而傳回值可以是資料、可以是變數、也可以是運算式,但回傳值最終會是資料常值的結果。使用return 敘述就可以傳回資料結果,若函式的任務是沒有傳回值時,則return敘述可省略。

[例] 定義一個函式主體,函式名稱為 average,傳入兩個整數引數n1n2,傳回值是兩的引數的平均值,傳回值使用a浮點數變數。(檔名:function01.py)

說明
3行:傳回值使用變數a,也可以使用運算式(n1+n2)/2,此種情況可以省略
2行敘述。即本行可改為:
return (n1 + n2) / 2

函式的呼叫

當在主程式或函式中用敘述呼叫另一個函式去執行一個工作時,我們將前者稱為「呼叫敘述」,後者稱為「被呼叫的函式」(就是上一小節的函式定義主體)。•若前者呼叫敘述小括號內有引數,我們稱為「實引數」(Actual Parameter),被呼叫函式名稱後面小括號內的引數稱為「虛引數」(Formal Parameter)。呼叫敘述呼叫函式的寫法有兩種,一種有傳回值,另一種沒有傳回值:

有傳回值的函式呼叫

變數1, 變數2,... ... = 函式名稱(引數1, 引數2,... ...)
  1. 使用指定運算子「=」,會將等號右邊執行的結果指定給等號左邊的變數。函式可傳回一個或多個結果。

  2. 引數:在此的引數稱為實引數,是傳遞給所呼叫函式使用的資料。實引數的數量、資料型別,必須和被呼叫函式的虛引數一致。引數若是兩個以上,引數間使用逗號「,」隔開,實引數可以為變數、串列元素、串列,也可以是常值或運算式。引數列若為0個時,( ) 仍需要保留不可省略。

  3. 電腦將實引數傳出給被呼叫函式(函式主體)的虛引數,傳入的虛引數將所得到的資料帶入函式主體內,經過運算處理後,在被呼叫函式的最後透過 return敘述傳回一個或多個結果資料給呼叫敘述端的變數。被呼叫函式端的傳回值數量、資料型別,必須和呼叫敘述端的變數一致。

[簡例] 定義一個可以計算兩整數平均值並可傳回計算結果的自定函式, 並完成整個呼叫自定函式的過程。 (檔名:function02.py)

[結果]

輸入第 1 個整數: 11   ↵
輸入第 2 個整數:6    ↵
11 和 6 兩整數平均為:8.5

[簡例] 定義一個可以計算等差數列的和與末項的自定函式,呼叫函式前使用者須輸入數列的首項、公差、項數,呼叫函式後印出數列的和及數列的末項。 (檔名:function03.py)

[結果]

輸入數列的首項 : 3    ↵
輸入數列的公差 : 2    ↵
輸入數列的項數 : 5    ↵
等差數列的末項為 11,和為 35.0

沒有傳回值的函式呼叫

函式名稱(引數1, 引數2,... ...)

沒有傳回值的函式呼叫,只是將呼叫敘述端的實引數傳給被呼叫函式端的虛引數。接著,虛引數將所得到的資料帶入函式內經過運算處理後,直接將結果在函式內輸出顯示,不傳回到原來的呼叫敘述。

[簡例] 定義一個能傳入字元和字元數的自定函式,該函式的任務是將所傳入的字元,以所傳入的字元數在函式定義主體內顯示出來,沒有傳回值。呼叫時,實引數分別使用變數、常值、運算式來傳入。(檔名:function04.py)

[結果]

AAAAAAAAAAAA
sssssssssssssss
BBBBBBBBBBBBBBBB

引數的預設值

  1. 當自定函式建立時設計需要傳入引數,而呼叫該函式時沒有傳遞引數或傳遞的實引數數量少於虛引數數量,在這種情況下一般是會產生錯誤的。

    [例] 引數數量不一致的函式錯誤呼叫。(檔名:triangle01.py)

  2. 要避免造成上面錯誤的情形,只要在宣告函式主體時,將虛引數用=運算子指定預設值即可。若呼叫該函式時沒有傳遞引數或傳遞的實引數數量少於虛引數的數量時,虛引數的預設值就派上用場了。

    [簡例] 求三角形面積函式主體建立時,兩個虛引數底與高皆指定預設值。當呼叫該函式時,分別以不傳遞實引數、只傳遞一個實引數或傳遞兩個實引數,來觀察呼叫函式的執行情況。 (檔名:triangle02.py)

    [結果]

    三角形的底為 10,高為 5
    三角形的面積為 25.0
     
    三角形的底為 10,高為 6
    三角形的面積為 30.0
     
    三角形的底為 6,高為 6
    三角形的面積為 18.0

相關主題與延伸閱讀