2

この例を見てください (python 2.7.6 を使用):

>>> def func(a, b, c, d):  
    print a, b, c, d

>>> func(1, c = 3, *(2,), **{'d':4})
1 2 3 4

ここまでは、これでいいです。しかし、なぜ次の呼び出しが失敗するのでしょうか?

>>> func(1, b = 3, *(2,), **{'d':4})

Traceback (most recent call last):
  File "<pyshell#69>", line 1, in <module>
    func(1, b = 3, *(2,), **{'d':4})
TypeError: func() got multiple values for keyword argument 'b'
4

1 に答える 1

3

別の関数シグネチャでよりよく理解できます

>>> def func(*args, **kw):
        print(args, kw)


>>> func(1, b = 3, *(2,), **{'d':4})
(1, 2) {'b': 3, 'd': 4}

そのため、位置引数がまとめられ、キーワード引数もまとめられます。

元の署名を使用すると、23が に割り当てられることを意味しますがb、これは無効です。

PS:単純なタプルのアンパックでは名前が提供されないため、値は位置引数として扱われます。

于 2013-11-22T15:48:14.163 に答える