Python函式的引數傳遞(3)
def printAll(**kargs):
for k in kargs:
print k, ':', kargs[k]
printAll(a=1, b=2, c=3)
printAll(x=4, y=5)
print '------'
def func(x, y=5, *a, **b): print x, y, a, b func(1) func(1,2) func(1,2,3) func(1,2,3,4) func(x=1) func(x=1,y=1) func(x=1,y=1,a=1) func(x=1,y=1,a=1,b=1) func(1,y=1) func(1,2,3,4,a=1) func(1,2,3,4,k=1,t=2,o=3)
結果:
a : 1
c : 3
b : 2
y : 5
x : 4
------
1 5 () {}
1 2 () {}
1 2 (3,) {}
1 2 (3, 4) {}
1 5 () {}
1 1 () {}
1 1 () {'a': 1}
1 1 () {'a': 1, 'b': 1}
1 1 () {}
1 2 (3, 4) {'a': 1}
1 2 (3, 4) {'k': 1, 't': 2, 'o': 3}
注意:
在混合使用時,首先要注意函式的寫法,必須遵守: 帶有預設值的形參(arg=)須在無預設值的形參(arg)之後; 元組引數(*args)須在帶有預設值的形參(arg=)之後;而在函式被呼叫時,引數的傳遞過程為: 1.按順序把無指定引數的實參賦值給形參; 2.把指定引數名稱(arg=v)的實參賦值給對應的形參; 3.將多餘的無指定引數的實參打包成一個 tuple 傳遞給元組引數(*args); 4.將多餘的指定引數名的實參打包成一個 dict 傳遞給字典引數(**kargs)。