Python関数のパラメータ伝達(3)

1273 ワード

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=)の後にする必要があります.
辞書パラメータ(**kargs)は、メタパラメータ(*args)の後
呼び出し時にも、次の手順に従う必要があります.
パラメータ名を指定するパラメータは、指定したパラメータ名のないパラメータの後にします.
パラメータを順番に指定した後、名前を指定して渡すことはできません.
関数が呼び出されると、パラメータの転送プロセスは次のとおりです.
1.指定されたパラメータのない実パラメータを順番に形パラメータに割り当てる.
2.指定したパラメータ名(arg=v)の実パラメータを対応するパラメータに割り当てる.
3.余分な指定されたパラメータのない実パラメータを1つのtupleにパッケージしてメタグループパラメータに渡す(*args);
4.余分な指定パラメータ名の実パラメータをdictにパッケージして辞書パラメータ(**kargs)に渡す.