Python中的傳參方式是比較靈活的,主要包括以下六種:
- 按照位置傳參
- 按照關鍵字傳參
- 預設引數
- 元組傳參
- 字典傳參
- 綜合傳參
按照位置傳參
顧名思義,引數與形引數目一致,並且是按照位置一一對應的。
def func(a, b):
return a+b*2
當呼叫函式func(1,2)時,則按照a=1,b=2的方式形參與引數對應,傳回結果為5。
按照關鍵字傳參
這種方式在呼叫函式時既傳引數,也傳形參。因而,不需要根據位置對應了,位置可以顛倒:
def func(a, b):
return a+b*2
當呼叫函式func(b=1,a=2)時,則按照b=1,a=2的方式形參與引數對應,匹配的方式是關鍵字而非位置,傳回結果為4。
預設引數
預設引數必須放在前兩類引數之後,在呼叫函式的時候可以傳參,也可以不傳。不傳則採用預設的引數值。
def func(a, b, c = 3):
return a+b*2+c
其中,c為預設引數。當透過func(1,2)呼叫函式時,c的取值為預設值3,函式的執行結果為8;當透過func(1,2,5)呼叫函式時,c的取值為引數值5,函式的執行結果為10。
元組傳參
傳入的引數以元組的形式呈現,長度不限,可以透過元組的訪問方式依次訪問各個入參:
def func(*args):
for eacharg in args:
print ('tuple arg:', eacharg)
呼叫方式如下:func(‘I’, ‘Love’, ‘PythonSomething’)
呼叫結果為:
tuple arg: I
tuple arg: Love
tuple arg: PythonSomething
字典傳參
傳入的引數以字典的形式呈現,長度不限,可以透過字典的訪問方式依次訪問各個入參:
def func(**kwargs):
for eachkwarg in kwargs.keys():
print('Dict Arg', eachkwarg, ':', kwargs[eachkwarg])
呼叫方式如下:
func(English_name = ‘PythonSomething’, Chinese_name= ‘Python那些事’)
呼叫結果為:
Dict Arg English_name : PythonSomething
Dict Arg Chinese_name : Python那些事
綜合傳參
是以上幾種傳參方式的綜合。實際上,大家從上面的例子也可以發現,元組傳參和字典傳參已經能夠滿足大部分傳參場景。所以,通常所的綜合傳參指的是這兩種的組合,大家在原始碼中也經常會發現它們的身影:
def func(*args,**kwargs):
for eacharg in args:
print('tuple arg:', eacharg)
for eachkwarg in kwargs.keys():
print('Dict Arg', eachkwarg, ':', kwargs[eachkwarg])
呼叫示例為:
func(‘I’, ‘Love’, ‘PythonSomething’, English_name = ‘PythonSomething’, Chinese_name= ‘Python那些事’)
呼叫結果為:
tuple arg: I
tuple arg: Love
tuple arg: PythonSomething
Dict Arg Chinese_name : Python那些事
Dict Arg English_name : PythonSomething
(完)