![](../../img/interpret.jpg)
Python 簡易手冊
單元 44 - 函數與 return 陳述
函數 (function) 是一組可重複執行的程式碼,藉由呼叫 (call) 然後選擇性提供引數 (argument) 進行計算,也可以選擇性回傳計算結果。函數用關鍵字 (keyword) def 定義,舉例如下
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 定義函數 def do_something(): # 印出訊息 print("What?") # 呼叫函數 do_something() # 檔名: def_demo.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
關鍵字 def 後面空一格,然後接上函數識別字 (identifier) do_something ,函數識別字之後要接上小括弧 () ,小括弧裡頭放的是參數列 (parameter list) ,這裡留空,表示沒有參數 (parameter) ,最後要加上冒號 : ,底下縮排部分就是函數所要執行的工作,這裡只有在命令列印出訊息,注意這個函數並沒有回傳值 (return value) 。
第 7 行簡單呼叫函數 do_somehting() ,呼叫函數要把函數識別字跟最後小括弧打出來,此例執行結果如下
> python def_demo.py |
What? |
> |
參數列可以提供多個參數,每個參數以逗號分隔,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 定義函數 def do_something(p1, p2): # 印出參數 print(p1 + p2) # 呼叫函數印出引數 do_something("Hello", "Python") # 檔名: def_demo2.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
這裡 do_something 之後的小括弧中有兩個參數 p1 及 p2 ,函數工作則是印出兩個參數的相加值。下面呼叫函數就需要提供兩個引數,也就是定義幾個參數,呼叫的時候就要提供幾個引數,這裡兩個引數都是字串 (string) ,因此會印出相連字串,此例執行結果如下
> python def_demo2.py |
HelloPython |
> |
就英文原文的術語而言,函數在參數列定義的識別字叫做參數,稱作 formal parameter ,實際呼叫的時候提供的值叫做引數,稱作 actual argument 。
單元 33 - 字串介紹如何定義字串,單元 12 - 算術運算子介紹算術運算子 (arithmetic operator) 的用法。
如果函數定義回傳值,就需要在函數工作最後加上 return 陳述 (statement) ,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 定義函數 def do_something(p1, p2): # 回傳值 return p1 + p2 # 呼叫函數 r = do_something("Hello", "Python") # 印出回傳值 print(r) # 檔名: def_demo3.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
此例在函數工作區的最後加上了 return 陳述,因此 do_somehting() 函數會回傳兩個參數的相加值,底下第 7 行則是以變數 (variable) r 接收 do_something() 的回傳值,然後第 9 行印出變數 r
6 7 8 9 | # 呼叫函數 r = do_something("Hello", "Python") # 印出回傳值 print(r) |
執行結果如下
> python def_demo3.py |
HelloPython |
> |
不過要注意,函數只有一個回傳值,雖然可以用逗號來回傳多個值,像是
# 定義函數 def do_something(p1, p2): # 回傳值 return p1, p2 |
接收端也可以加上逗號以多個變數來取得回傳值,例如
# 呼叫函數 r1, r2 = do_something("Hello", "Python") |
但是實際上這是序對 (tuple) ,回傳是序對,接收端也是序對,序對並沒有強制一定要加小括弧,因此以下
# 呼叫函數 r = do_something("Hello", "Python") |
變數 r 的型態就是序對。
單元 38 - 序對與 Range介紹如何定義序對。
以上簡略地介紹如何定義函數,接下來幾個單元會繼續深入討論函數
參考資料
- https://docs.python.org/3/reference/compound_stmts.html#function-definitions
- https://docs.python.org/3/tutorial/controlflow.html#defining-functions
![](../../img/pydoing.gif)