← トップ
5 / 10

5. *args / **kwargs(可変長引数)

CONCEPT

関数を作るとき、引数の数を決めなくていい書き方です。*argsアーグズ — 引数まとめ(タプル) はいくつでも「普通の引数」をタプルで受け取り、**kwargsクワーグズ — 名前付き引数まとめ(辞書) はいくつでも「名前つき引数」を辞書で受け取ります。

📍 使い道: 関数に「任意の数の引数」を渡せるようにする
COMMON MISTAKES — よくある間違い
*args を普通の引数の前に置くdef func(*args, name): はエラー。*args は通常の引数の後に置きます。
**kwargs のキーに文字列以外を使う**kwargs のキーは常に文字列です。func(**{1: "a"}) はエラーになります。
コードを1行ずつ実行してみよう
example.pyPython
1def add_all(*args):# 引数 (1, 2, 3) を args として受け取る
2 total = 0# total を 0 で初期化
3 for num in args:# 1回目のループ: num = 1
4 total += num# total = 0+1+2 = 3 に更新
5 return total# total = 0+1+2+3 = 6 を返す
« 次の行 » ボタンを押して実行を開始
VARIABLES
実行すると変数の状態が表示されます
*args は「任意の数の引数」、**kwargs は「任意の名前付き引数」です。 def func(*args) なら func(1,2,3) のようにいくつでも渡せます。 「何個来るか分からない」時に便利な書き方です。
📚 読み方ガイド
記号意味説明
*args余った引数をまとめるタプルになる
**kwargs余った名前つき引数をまとめる辞書になる
def f(a, b, *args)並び順のルール普通 → *args → **kwargs
KEY POINT

*argsアーグズ — 引数まとめ(タプル)* は「余った普通の引数をまとめる」、**kwargsクワーグズ — 名前付き引数まとめ(辞書)** は「余った名前つき引数をまとめる」。並び順は 普通の引数 → *args → **kwargsargskwargs は慣例としてこの名前を使う。

確認問題
1test("a", "b", "c") で args の値は?
def test(*args): print(args) test("a", "b", "c")
('a', 'b', 'c') です。3つの引数がタプルとしてまとめられます。argsアーグズ — 引数まとめ には ('a', 'b', 'c') が入ります。
2greet(name="花子", mood="元気") で kwargs の値は?
def greet(**kwargs): print(kwargs) greet(name="花子", mood="元気")
{'name': '花子', 'mood': '元気'} です。名前つき引数が辞書としてまとめられます。
3def wrong(**kwargs, *args) はエラーになる。なぜ?
def wrong(**kwargs, *args): pass
並び順が間違っているからです。正しい順序は「普通の引数 → *argsアーグズ — 引数まとめ(タプル)**kwargsクワーグズ — 名前付き引数まとめ(辞書)」です。**kwargs は必ず最後に書きます。
CHEAT SHEET — まとめ
3行で分かる
  • 引数の数を決めずに受け取れる可変長引数の仕組み
  • *args は普通の引数をタプルで・**kwargs は名前付きを辞書で
  • 柔軟な関数(ラッパーや汎用関数)を作れる
*args/**kwargs