6.2. 參數 (argument)


在前一節中提到Python的函式可以有任何類型及數量的輸入參數,在此節則進一步介紹Python函數的參數相關議題。

位置參數

在Python中其處理函數參數的方式非常的靈活,最常見的方式是使用位置參數,即使用者在使用函數時依序輸入參數的順序,會被指派到相對應位置的參數。

# 定義函數
def say_to(parameter1, parameter2):
    print(parameter1 + ' ' + parameter2)


# 主要程式碼
# 呼叫函數
say_to('Hello!', 'John')
say_to('Mary', "Are you ok?")


# 執行結果
Hello! John
Mary Are you ok?

關鍵字參數

有時候為了避免使用位置參數發生問題,此時就可以使用關鍵字參數,即使用參數所對應的名稱來指派一個值。

# 定義函數
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

參數預設值

參數可以設定預設值,當使用者沒有指派值給某特參數時,這些參數會直接使用預設值。

# 定義函數
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

使用 * 收集位置參數

當在函數中使用 * (或星號)時,會使用元組將一些潛在的參數給群組化。

# 定義函數
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 來儲存。若輸入的參數數量少於位置參數的數量時,會產生錯誤訊息。

# 定義函數
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'

使用 ** 收集關鍵字參數

如同使用 * 一樣,可以使用 ** (或兩個星號)來收集關鍵字參數,這些關鍵字參數會被群組化為字典。

# 定義函數
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 將它們收集起來。

# 定義函數
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著, 賴屹民譯, 歐萊禮

results matching ""

    No results matching ""