6.2. 參數 (argument)
在前一節中提到Python的函式可以有任何類型及數量的輸入參數,在此節則進一步介紹Python函數的參數相關議題。
位置參數
在Python中其處理函數參數的方式非常的靈活,最常見的方式是使用位置參數,即使用者在使用函數時依序輸入參數的順序,會被指派到相對應位置的參數。
- 參考檔案:arguments_order.py
# 定義函數
def say_to(parameter1, parameter2):
print(parameter1 + ' ' + parameter2)
# 主要程式碼
# 呼叫函數
say_to('Hello!', 'John')
say_to('Mary', "Are you ok?")
# 執行結果
Hello! John
Mary Are you ok?
關鍵字參數
有時候為了避免使用位置參數發生問題,此時就可以使用關鍵字參數,即使用參數所對應的名稱來指派一個值。
- 參考檔案:arguments_keyword.py
# 定義函數
def say_to(target, words):
print(words + ' ' + target)
# 主要程式碼
# 呼叫函數
say_to(words='Hello!', target='John')
say_to(target='Mary', words="Are you ok?")
# 執行結果
Hello! John
Are you ok? Mary
參數預設值
參數可以設定預設值,當使用者沒有指派值給某特參數時,這些參數會直接使用預設值。
- 參考檔案:arguments_default.py
# 定義函數
def say_to(target="John", words="Hello!"):
print(words + ' ' + target)
# 主要程式碼
# 呼叫函數
say_to()
say_to(target='Mary', words="Are you ok?")
say_to(target='Mary')
# 執行結果
Hello! John
Are you ok? Mary
Hello! Mary
使用 * 收集位置參數
當在函數中使用 * (或星號)時,會使用元組將一些潛在的參數給群組化。
- 參考檔案:arguments_1star.py
# 定義函數
def print_args(*args):
print('The arguments:', args)
# 主要程式碼
# 呼叫函數
print_args()
print_args(1, 2.0, 3, 'a', 'b', 'c')
# 執行結果
The arguments: ()
The arguments: (1, 2.0, 3, 'a', 'b', 'c')
在函數中也可以用位置參數來表示最少需要多少個參數,其餘的參數則使用 *args 來儲存。若輸入的參數數量少於位置參數的數量時,會產生錯誤訊息。
- 參考檔案:arguments_1star2.py
# 定義函數
def print_args(parameter1, parameter2, *args):
print('The needed arguments:', parameter1, parameter2)
print('The rest arguments:', args)
print()
# 主要程式碼
# 呼叫函數
print_args(1, 2.0)
print_args(1, 2.0, 3, 'a', 'b', 'c')
print_args(1)
# 執行結果
The needed arguments: 1 2.0
The rest arguments: ()
The needed arguments: 1 2.0
The rest arguments: (3, 'a', 'b', 'c')
Traceback (most recent call last):
File "python", line 12, in <module>
TypeError: print_args() missing 1 required positional argument: 'parameter2'
使用 ** 收集關鍵字參數
如同使用 * 一樣,可以使用 ** (或兩個星號)來收集關鍵字參數,這些關鍵字參數會被群組化為字典。
- 參考檔案:arguments_2star.py
# 定義函數
def print_args(**kwargs):
print('Keyword arguments:', kwargs)
print()
# 主要程式碼
# 呼叫函數
print_args(keyword1=1, keyword2=2.0, keyword3='a', keyword4='b')
# 執行結果
Keyword arguments: {'keyword1': 1, 'keyword2': 2.0, 'keyword3': 'a', 'keyword4': 'b'}
同樣地,可以使用固定數量的關鍵字參數來表示最少需要多少個關鍵字參數,並且指派預設值給這些關鍵字參數,其餘的關鍵字參數則可以使用 **kwargs 將它們收集起來。
- 參考檔案:arguments_2start2.py
# 定義函數
def print_args(keyword1=1, keyword2=2.0, **kwargs):
print('The needed keyword arguments:', keyword1, keyword2)
print('The rest keyword arguments:', kwargs)
print()
# 主要程式碼
# 呼叫函數
print_args(keyword1=3, keyword2=4.0, keyword3='a', keyword4='b')
print_args(keyword3='a', keyword4='b')
# 執行結果
The needed keyword arguments: 3 4.0
The rest keyword arguments: {'keyword3': 'a', 'keyword4': 'b'}
The needed keyword arguments: 1 2.0
The rest keyword arguments: {'keyword3': 'a', 'keyword4': 'b'}
參考資料
- Python自動化的樂趣, 第三章, Al Sweigart 著、H&C 譯, 碁峰
- Python編程入門第3版(簡), 第五章, Toby Donaldson著, 人民郵電出版社
- 精通Python, 第四章, Bill Lubanovic著, 賴屹民譯, 歐萊禮