もう1つ答えを追加したい:
関数の呼び出しで、キーワード引数とともに間違った位置順序で位置パラメーターを渡そうとすると発生します。
there is difference between parameter and argument
ここで詳細を読むことができますArguments and Parameter in python
def hello(a,b=1, *args):
print(a, b, *args)
hello(1, 2, 3, 4,a=12)
3 つのパラメーターがあるため:
a は位置パラメータです
b=1 はキーワードであり、デフォルトのパラメータです
*args は可変長パラメータです
そのため、最初に を位置パラメータとして割り当てます。これは、位置引数に値をその位置の順序で提供する必要があることを意味します。ここでは順序の問題です。しかし、呼び出し関数の a の場所で引数 1 を渡し、キーワード引数として扱い、 a にも値を提供しています。今は2つの値があります:
1 つは位置値です: a=1
2 番目は a=12 のキーワード値です
解決
a は 1 である 1 つの位置値のみを取得し、b は値 2 を取得し、残りの値は *args (可変長パラメーター) を取得するように変更hello(1, 2, 3, 4,a=12)
する必要があります。hello(1, 2, 3, 4,12)
追加情報
*args が 2,3,4 になり、a が 1 になり、b が 12 になるようにしたい場合
次に、このようにすることができます
def hello(a,*args,b=1):
pass
hello(1, 2, 3, 4,b=12)
もっと何か :
def hello(a,*c,b=1,**kwargs):
print(b)
print(c)
print(a)
print(kwargs)
hello(1,2,1,2,8,9,c=12)
出力:
1
(2, 1, 2, 8, 9)
1
{'c': 12}