![](../../img/interpret.jpg)
Python 簡易手冊
單元 46 - 預設引數
定義函數 (function) 時在參數列 (parameter list) 可以直接用等號替參數 (parameter) 設定值,也就是讓參數有預設值,這叫做預設引數 (default arguemnt value) ,這樣在呼叫的時候可以不提供引數 (arguemnt) ,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # 定義函數 def do_something(a=1, b=2, c=3, d=4): # 印出參數 print(a, end=", ") print(b, end=", ") print(c, end=", ") print(d, end=", ") print() # 呼叫函數 do_something() # 檔名: def_demo7.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
單元 44 - 函數與 return 陳述介紹如何定義函數。
由於四個參數都有預設值,因此呼叫的時候不需要提供引數,執行結果如下
> python def_demo7.py |
1, 2, 3, 4, |
> |
但是有一點需要注意,如果預設引數有可變的 (mutable) 資料型態,例如串列,這時候只要函數名稱還在作用域當中,可變資料型態的預設引數就不會重新被設定,舉例如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # 定義函數 def do_something(a=[], b=2, c=3, d=4): # 附加元素 a.append(b) a.append(c) a.append(d) # 印出參數 print(a) # 呼叫函數 do_something() do_something() # 檔名: def_demo8.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
這個例子的參數 a 的預設引數為空串列 (list) ,然後底下呼叫兩次 do_something() 函數,執行結果如下
> python def_demo8.py |
[2, 3, 4] [2, 3, 4, 2, 3, 4] |
> |
以上第二次呼叫 do_something() 的時候,參數 a 並沒有被重新指派為空串列,而是沿用第一次呼叫並建立的串列。如果希望可變資料型態的的預設引數要重新設定,那可以將預設引數設定為 None ,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # 定義函數 def do_something(a=None, b=2, c=3, d=4): # 判斷參數是否有值 if a == None: a = [] a.append(b) a.append(c) a.append(d) # 印出參數 print(a) # 呼叫函數 do_something() do_something() do_something([]) do_something(b=5,c=6,d=7) # 檔名: def_demo9.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
單元 20 - if 陳述介紹 if 陳述。
上例在函數工作先用中 if 判斷參數 a 是否為 None ,如果是 None 才把 a 設定為空串列,然後才做資料附加的部分,相對 a 不是 None 就只會執行最底下的印出 a ,底下執行部份呼叫 4 次,執行結果如下
> python def_demo8.py |
[2, 3, 4] [2, 3, 4] [] [5, 6, 7] |
> |
以上可以看到如果把預設引數設定為 None ,每一次執行都會重置,不會保留上一次的執行結果。
參考資料
![](../../img/pydoing.gif)