Python 函式的引數與關鍵字

  • 函式基本用法
  • 引數與關鍵字

Python 函式的引數與關鍵字

函式基本用法

一般的 Python 函式如下:

def AFunction(x, y, z):
    print(x, y, z)

a = 10
b = 20
c = 30
AFunction(a, b, c)
#10 20 30

函式接收名稱(name),以在函式中利用之。

另一種指定 name 的用法如下:

def AFunction(x=0, y=0, z=0):
    print(x, y, z)

a = 10
b = 20
AFunction(a, z=b)
#10  0  20

規則:

  • 指定預設數值的項目必須置於尾端。
  • 未指定的項目會依順序代入。

若是接收數目與輸入不同,會 Raise 出 TypeError。

引數與關鍵字

Python 提供了使用 tuple、list、dict 來輸入函式,樣式和使用上與 C 語言類似,不過並不是代表指標(Pointer)的意思。

有序排列的 tuple 和 list 使用星號 * 代表,稱為「引數(Arguments, args)」,會依序輸入或接收進函式。

純輸入:接收端數量不對等會回傳錯誤。

def AFunction(x, y, z):
    print(x, y, z)

aList = [10, 20, 30]
AFunction(*aList)
#10  20  30

純接收:型態為 tuple。

def AFunction(*aList):
    print(aList)

AFunction(10, 20, 30)
#(10, 20, 30)

輸入 + 接收:數量必須調整與對應適當。

def AFunction(a, b, c, *aList):
    print(aList) #前三項不會顯示

AFunction(10, 20, *[30, 40, 50, 60])
#(40, 50, 60)

使用索引的 dict 使用雙星號 ** 代表,稱為「關鍵字(Keywords, kwargs)」,會依名稱填入函式。名稱的部份規定必須使用 string 表示

純輸入:接收端名稱不同、未指定預設值的項目沒輸入,皆會回傳錯誤。

def AFunction(x, y, z):
    print(x)

aList = {'x':10, 'y':20, 'z':30}
AFunction(**aList)
#10

純接收:型態為 dict。注意輸入端都需要給名稱

def AFunction(**aList):
    print(aList)

AFunction(c=10, a=20, b=30)
#{'a': 20, 'c': 10, 'b': 30}

輸入 + 接收:名稱必須調整與對應適當。

def AFunction(missed, **aList):
    print(aList) #不會列出 missed

AFunction(a=10, b=20, **{'c':30, 'missed':40, 'd':50})
#{'a': 10, 'c': 30, 'b': 20, 'd': 50}

引數與關鍵字是可以混合用的,不過兩者必須擺在接收端和輸入端的最後項。

此時函式會照位置依序對應,再照引數依序對應,有名稱的項目最後才根據關鍵字對應。

def AFunction(x, y, *aList, **bList):
    print(aList)
    print(bList)

AFunction(0, u=10, y=20, *[30, 40], **{'z':50, 'w':60})
#TypeError: AFunction() got multiple values for argument 'y'

以上錯誤就是因為第一個 0 和 [30, 40] 的 list 已經帶入 x 和 y,並且多出一個 40,而之後又追加一個 y 的名稱所致。

善用這個功能,可以創造多變的輸入函式,應用到迴圈處理(如新增許多不同欄數的表格內容),不用再個別撰寫類似的函式流程。


Comments

comments powered by Disqus