![](../../img/interpret.jpg)
Python 簡易手冊
單元 47 - 不限個數引數
基本上,定義函數 (function) 時設定多少參數 (parameter) ,呼叫函數就得提供多少引數 (argument) ,如果呼叫端不確定每次呼叫提供的引數數量,這時候在函數可以改成定義不限個數引數 (arbitrary argument list) ,有兩種,分別是讓引數變成序對 (tuple) 或字典 (dictionary) ,以下先示範將引數設定為序對
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 定義函數 def do_something(*a): # 印出參數型態 print(type(a)) # 印出參數 print(a) # 呼叫函數 do_something(1, 2, 3, 4) # 檔名: def_demo10.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
單元 44 - 函數與 return 陳述介紹如何定義函數,單元 38 - 序對與 Range介紹序對的用法,單元 41 - 字典介紹字典的用法。
在參數前加上一個星號,這時呼叫端如第 9 行需要用位置引數 (positional argument) 呼叫,這就會是序對的不限個數引數,執行結果如下
> python def_demo10.py |
<class 'tuple'> (1, 2, 3, 4) |
> |
單元 45 - 位置引數與關鍵字引數介紹如何定義位置引數與關鍵字引數 (keyword argument) 。
以上可以看到參數 a 就是序對,以下先示範將引數設定為字典
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 定義函數 def do_something(**a): # 印出參數型態 print(type(a)) # 印出參數 print(a) # 呼叫函數 do_something(a=1, b=2, c=3, d=4) # 檔名: def_demo11.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
參數前加上連續兩個星號就是字典,注意呼叫端如第 9 行需要用改成關鍵字引數呼叫,執行結果如下
> python def_demo11.py |
<class 'dict'> {'a': 1, 'b': 2, 'c': 3, 'd': 4} |
> |
同時在一個函數中定義兩種不限個數引數也是可以的,但是必須序對在前,字典在後,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # 定義函數 def do_something(*a, **b): # 印出參數型態 print(type(a)) # 印出參數 print(a) # 印出參數型態 print(type(b)) # 印出參數 print(b) # 呼叫函數 do_something(1, 2, c=3, d=4) # 檔名: def_demo12.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
此例執行結果如下
> python def_demo12.py |
<class 'tuple'> (1, 2) <class 'dict'> {'c': 3, 'd': 4} |
> |
注意不限個數引數只能定義在參數列的最後,也就是說,參數列要先定義位置引數或預設引數 (default argument value) ,最後才能加上不限個數引數的定義。
參考資料
![](../../img/pydoing.gif)