Python 在定義函數時不需要指定形參的類型,完全由調用者傳遞的實參類型以及 Python 解釋器的理解和推斷來決定。
接下來,本文將介紹以下四個函數的參數類型:
位置參數:調用函數時實參和形參的順序必須嚴格一致,並且實參和形參的數量必須相同。
即下面的格式:
def showArgs(a, b, c):
print(a, b, c)
show(1, 2, 3) # 1 2 3
show(1, 2) # TypeError: showArgs() missing 1 required positional argument: 'c'
show(1, 2, 3, 4) # TypeError: showArgs() takes from 1 to 3 positional arguments but 4 were given
默認值參數:在調用有默認值參數的時,可以不對有默認值的參數賦值(如果有,則會使用傳遞的值),即與上面的位置參數不同的是,可以缺少參數傳遞,不過也不能多傳。
它的使用方法:即,在定義函數時:def demo(a=1, b=2)
填寫參數的時候給一個默認值。
舉個例子看看:
def showArgs(a, b=3, c=2):
print(a, b, c)
showArgs(1, 2, 3) # 1 2 3
showArgs(1, 2) # 1 2 2
showArgs(1, 2, 3, 4) # TypeError: showArgs() takes from 1 to 3 positional arguments but 4 were given
注意事項:
使用,關鍵參數,實參順序和形參順序可以不一樣,不過如果參數沒有默認值,參數數量也要一致。
它的使用方法:在調用函數時: demo(a=1, b=2)
來指定參數的值。
舉個例子看看:
def showArgs(a, b, c):
print(a, b, c)
showArgs(1, 2, c=3) # 1 2 3
showArgs(a=1, c=22, b=33) # 1 33 22
注意事項:
錯誤情況:
showArgs(1, 22, b=33)
它會報這個錯誤:TypeError: showArgs() got multiple values for argument 'b'
,因為雖然 b
使用了關鍵參數,但是前面兩個為位置參數,通過位置參數,b
已經被賦值過了
showArgs(a=11, c=222, 333)
它會報這個錯誤:SyntaxError: positional argument follows keyword argument
,關鍵參數後面不能跟有位置參數
可變長度參數:即參數長度不固定
它有著以下兩種形式:
*parameter
: 接收多個位置實參並將其放在元組中**parameter
: 接收多個關鍵參數並將其放在字典中其中的 parameter
可以自定義為自己想要的名字
必須接收的是位置參數!!!
它的使用方法如下:
def showArgs(*args):
print(args)
showArgs(1, 2, 3) # (1, 2, 3)
showArgs(7, 8) # (7, 8)
必須接收的是關鍵參數!!!
它的使用方法如下:
def showArgs(**args):
print(args)
showArgs(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
showArgs(a=7, b=8) # {'a': 7, 'b': 8}