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) ,最後才能加上不限個數引數的定義。

參考資料

上一頁 單元 46 - 預設引數
回 Python 簡易手冊 首頁
下一頁 單元 48 - 裝飾子
回 Python 教材首頁
回程式語言教材首頁