*args と **kwargs は、関数を定義するときに、任意の数の引数を受け取るときに使用されます。

引数を受け取る時の方は次のようになります。

  • *args: tuple 型
  • **kwargs: dict 型

一般的に、args, kwargs と書かれることが多いですが、任意の値( *a, **b)でも問題ありません。

def test(*args, **kwargs, *extra_args):
    print(args)
    print(kwargs)

test(1, 2, 3, 4, 5, col=4, row=5)

// (1, 2, 3, 4, 5)
// {'col': 4, 'row': 5}

引数の順番は型でまとめないとエラーになります。

def extra_test(*args, **kwargs, *extra_args):
    print(args)
    print(kwargs)
    print(extra_args)

// File "<stdin>", line 1
//    extra_test(1, 2, 3, 4, 5, col=4, row=5, 6)
                                               ^
// SyntaxError: positional argument follows keyword argument

Reference(参考文献)