Python文法

【Pythonの可変長引数】*args、**kwargsの違いと使い方を徹底解説!

当サイトは広告を利用しています。

Pythonには複数の引数を受け取ることができる*argsと**kwargs(可変長引数)があります。本記事ではこれらの違いと性質について解説をします。

関数の基本を確認したい方はこちらの記事をご活用ください。

*argsの使い方

*argsは複数の引数をタプルで受け取ることができます。

def func_args(arg1, arg2, *args):
print('arg1:', arg1)
print('arg2:', arg2)
print('args:', args)
func_args(0, 1, 2, 3, 4)
# arg1: 0
# arg2: 1
# args: (2, 3, 4)
view raw args.py hosted with ❤ by GitHub

*argsの後ろに仮引数がある場合はキーワード引数で呼び出します。

def func_args(arg1, *args, arg2):
print('arg1:', arg1)
print('args:', args)
print('arg2:', arg2)
func_args(0, 1, 2, 3, arg2 = 4)
# arg1: 0
# args: (1, 2, 3)
# arg2: 4
def func_args(arg1, *args, arg2):
print('arg1:', arg1)
print('args:', args)
print('arg2:', arg2)
func_args(0, 1, 2, 3, 4)
# TypeError: func_args() missing 1 required keyword-only argument: 'arg2'
view raw args_keyword.py hosted with ❤ by GitHub

**kwargsの使い方

**kwargsは複数の引数を辞書で受け取ることができます。

def func_kwargs(arg1, arg2, **kwargs):
print('arg1:', arg1)
print('arg2:', arg2)
print('kwargs:', kwargs)
func_kwargs(0, 1, key1 = 1, key2 = 2, key3 = 3)
# arg1: 0
# arg2: 1
# kwargs: {'key1': 1, 'key2': 2, 'key3': 3}
view raw kwargs.py hosted with ❤ by GitHub

仮引数に対応するキーワードを除いたすべてのキーワード引数が入ります。

def func_kwargs(arg1, arg2, **kwargs):
print('arg1:', arg1)
print('arg2:', arg2)
print('kwargs:', kwargs)
func_kwargs(0, arg2 = 1, key1 = 1, key2 = 2, key3 = 3)
# arg1: 0
# arg2: 1
# kwargs: {'key1': 1, 'key2': 2, 'key3': 3}

**kwargsは最後でのみ定義できます。

def func_kwargs(arg1, **kwargs, arg2):
print('arg1:', arg1)
print('arg2:', arg2)
print('kwargs:', kwargs)
func_kwargs(0, arg2 = 1, key1 = 1, key2 = 2, key3 = 3)
# SyntaxError: invalid syntax
view raw kwargs_error.py hosted with ❤ by GitHub

*argsと**kwargsの性質

*argsと**kwargsには以下の性質があります。

*argsと**kwargsは同時に使える

*argsと**kwargsは同時に使うことができます。

def func_args_kwargs(*args, **kwargs):
print(args)
print(kwargs)
func_args_kwargs(0, 1, 2, key1 = 1, key2 = 2)
# (0, 1, 2)
# {'key1': 1, 'key2': 2}
view raw args_kwargs.py hosted with ❤ by GitHub

名前に決まりはない

*args、**kwargsとしなくても問題ありません。

def func_args_kwargs(*a, **b):
print(a)
print(b)
func_args_kwargs(0, 1, 2, key1 = 1, key2 = 2)
# (0, 1, 2)
# {'key1': 1, 'key2': 2}

引数がないとき

引数無しで呼び出すと空のタプルと空の辞書になります。

def func_args_kwargs(*args, **kwargs):
print(args)
print(kwargs)
func_args_kwargs()
# ()
# {}

まとめ

*argsと**kwargsを使うことで複数の引数を扱うことができます。コーディングの幅を広げるのに活用しましょう。

関連記事
【Python】関数アノテーションの使い方


Pythonには
実力を証明できる資格があります

PythonにはPython3エンジニア認定基礎試験という試験があります。

試験範囲がPythonチュートリアル(公式ドキュメント)となっているため、Pythonの基礎を全て押さえることができます。

  • 独学で勉強していて、どれくらい理解できているのか調べたい
  • 今の仕事も続けつつ、キャリアの幅を広げたい
  • 新しい技術としてPythonを習得したい

そんな方は是非詳細をご確認ください。

おすすめ記事
【入門者向け】効率よくPythonを習得する3Step
【難易度爆下げ】Python3エンジニア認定基礎試験 公式問題集レビュー
【Python3エンジニア認定基礎試験】合格体験記からみんなの勉強方法を探ってみた

コメント

タイトルとURLをコピーしました