Python Language* argsと** kwargs


備考

注意すべき点がいくつかあります:

  1. argskwargsという名前は規約で使用されていますが、言語仕様の一部ではありません。したがって、これらは同等です:

     def func(*args, **kwargs):
         print(args)
         print(kwargs)
    

     def func(*a, **b):
         print(a)
         print(b)
    
  2. 複数のargsまたは複数のkwargsパラメータを持つことはできません(ただし必須ではありません)

     def func(*args1, *args2):
     #   File "<stdin>", line 1
     #     def test(*args1, *args2):
     #                      ^
     # SyntaxError: invalid syntax
    

     def test(**kwargs1, **kwargs2):
     #   File "<stdin>", line 1
     #     def test(**kwargs1, **kwargs2):
     #                       ^
     # SyntaxError: invalid syntax
    
  3. *argsに続く任意の位置引数は、名前だけで渡すことができるキーワードのみの引数です。 *args代わりに単一の星を使用して、可変引数リストを提供せずに値をキーワード引数にすることができます。キーワードのみのパラメータリストは、Python 3でのみ使用できます。

     def func(a, b, *args, x, y):
         print(a, b, args, x, y)
    
     func(1, 2, 3, 4, x=5, y=6)
     #>>> 1, 2, (3, 4), 5, 6
    

     def func(a, b, *, x, y):
         print(a, b, x, y)
    
     func(1, 2, x=5, y=6)
     #>>> 1, 2, 5, 6
    
  4. **kwargsはパラメータリストの最後に来なければなりません。

     def test(**kwargs, *args):
     #   File "<stdin>", line 1
     #     def test(**kwargs, *args):
     #                      ^
     # SyntaxError: invalid syntax
    

* argsと** kwargs 関連する例