AI資格ドリル
資格を選ぶ↓

用語比較

*args と **kwargs の違い(位置引数のまとめ受けとキーワード引数のまとめ受け)

*args は、仮引数のリストを超えた位置引数をタプルで受け取ります。**kwargs は、対応する仮引数がなかったキーワード引数を辞書で受け取ります。どちらも「余った引数をまとめて受ける」書き方で、受け取る形が違います。

Python3基礎試験では、関数定義の *name と **name を見て、渡した引数がどちらにどんな型で入るかを読み分けます。名前の args と kwargs は慣習で、* と ** の数が意味を決めます。

このページでは、受け取る型、並び順、呼び出し側の書き方という三つの軸で比較します。/ と * による位置専用・キーワード専用の指定は別のページで扱います。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。

公式一次資料と照合した内容
*name が位置引数の入ったタプルを、**name が対応する仮引数のないキーワード引数の入った辞書を受け取ること、*name を **name より前に置くこと、*args の後ろの仮引数がキーワード専用になること、呼び出し側の * と ** によるアンパックは、Python公式チュートリアルの4.9.2・4.9.4・4.9.5へ2026-10-12に照合しています。
編集部が学習用に整理した内容
試験での判定手順と使い分けの目安は編集部の学習上の整理です。

資格ごとの公式資料の一覧

結論

公式一次資料と照合:用語の定義は公式一次資料と照合しています。

*args

仮引数のリストを超えた位置引数を、タプルで受け取る。通常は仮引数リストの最後に置く。

**kwargs

対応する仮引数がないキーワード引数を、辞書で受け取る。*name と組み合わせるときは、*name を **name より前に置く。

違いを表で確認

比較軸*args**kwargs
受け取る引数位置引数のうち、仮引数に対応しなかった残りキーワード引数のうち、仮引数に対応しなかった残り
受け取る型タプル辞書
定義での並び**name より前に置く仮引数リストの最後に置く
呼び出し側のアンパックf(*リスト) で、リストやタプルを個別の位置引数に展開するf(**辞書) で、辞書をキーワード引数に展開する
選択肢で探すキーワードタプル、位置引数の残り辞書、キーワード引数の残り

公式一次資料と照合:Python3エンジニア認定基礎試験: 2026-09-18に一次資料で確認一次資料の一覧を見る →

Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)

試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

*args と **kwargs の * の数の意味があいまいな人

公式チュートリアルは、*name が位置引数の入ったタプルを受け取り、**name がキーワード引数の入った辞書を受け取ると述べます。覚え方は、* が1つならタプル、* が2つなら辞書です。

02

並べる順番で迷う人

公式チュートリアルは、*name は **name より前になければならないと述べます。*args の前に通常の仮引数を置くことはできますが、**kwargs は仮引数リストの最後です。

03

呼び出し側の * と ** が別の働きに見える人

公式チュートリアルは、リストやタプルを * でアンパックして位置引数に渡し、辞書を ** でアンパックしてキーワード引数に渡す例を示します。定義側のまとめ受けとは逆向きの操作です。

具体例で使い分ける

編集部の整理

例 1

『def cheeseshop(kind, *arguments, **keywords)』に位置引数とキーワード引数を渡す場合

cheeseshop("Limburger", "It's very runny, sir.", "It's really very, VERY runny, sir.", shopkeeper="Michael Palin", client="John Cleese", sketch="Cheese Shop Sketch") を呼んでいます。

  • 最初の "Limburger" は kind に対応します。
  • 残りの位置引数2つは、*arguments にタプルとして入ります。
  • shopkeeper・client・sketch の3つは、**keywords に辞書として入ります。

結論: arguments は位置引数2つのタプル、keywords はキーワード引数3つの辞書になります。

例 2

『def concat(*args, sep="/")』を呼び出す場合

concat("earth", "mars", "venus") と concat("earth", "mars", "venus", sep=".") の結果を問われています。

  • *args の後ろにある仮引数 sep は、キーワード専用引数になります。
  • 1つ目は sep が既定値の "/" なので 'earth/mars/venus' を返します。
  • 2つ目は sep="." をキーワードで渡しているので 'earth.mars.venus' を返します。

結論: それぞれ 'earth/mars/venus' と 'earth.mars.venus' になります。

例 3

『辞書 d を parrot(**d) として渡す』コードが出た場合

d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"} を parrot(**d) と渡しています。

  • 呼び出し側の ** は、辞書をキーワード引数に展開します。
  • d のキーが parrot の仮引数名に対応するので、voltage・state・action がそれぞれ指定されます。
  • 定義側の **kwargs でまとめて受ける操作とは、向きが逆です。

結論: 辞書の中身がキーワード引数として渡されると答えます。

問題文から答えを選ぶ手順

編集部の整理:試験での判定手順と使い分けの目安は編集部の学習上の整理です。

  1. 1

    定義の * の数を数える

    *name なら位置引数の残りをタプルで、**name ならキーワード引数の残りを辞書で受けます。

  2. 2

    仮引数に対応する引数を先に引く

    通常の仮引数に対応した引数は、まとめ受けの対象から外れます。残りだけがタプルや辞書に入ります。

  3. 3

    並び順を確認する

    *name は **name より前、**name は最後です。*args の後ろの仮引数はキーワード専用です。

  4. 4

    呼び出し側か定義側かを見分ける

    def の中なら受け取り、呼び出しの () の中ならアンパックです。

試験での見分け方

編集部の整理

  • 1*name は、仮引数のリストを超えた位置引数をタプルで受け取る。
  • 2**name は、仮引数に対応しなかったキーワード引数を辞書で受け取る。
  • 3*name は **name より前に置く。
  • 4*args の後ろにある仮引数は、キーワード専用引数になる。
  • 5呼び出しでの * はリストやタプルを、** は辞書をアンパックして渡す。

誤答しやすい選択肢

**kwargs がタプルで入ると考える

修正: **name は辞書で受け取ります。タプルで受け取るのは *name です。

名前が args と kwargs でなければ働かないと考える

修正: 働きを決めるのは * の数です。名前は慣習なので、*items や **options でも同じ動きになります。

**kwargs を *args より前に書けると考える

修正: *name は **name より前になければなりません。

呼び出し側の f(**d) を、定義側と同じ受け取りの操作だと考える

修正: 呼び出し側の ** は辞書の展開で、渡す向きの操作です。

確認問題

Q1関数定義の *args に渡された位置引数は、どの型で入りますか?

答え: タプル

公式チュートリアル4.9.4は、任意の個数の引数がタプルに格納されると述べています。

Q2関数定義の **name は、何を受け取りますか?

答え: 対応する仮引数がないキーワード引数が入った辞書

公式チュートリアル4.9.2は、それまでの仮引数に対応したものを除くすべてのキーワード引数が入った辞書を受け取ると述べています。

Q3*name と **name を同じ関数で使うとき、先に置くのはどちらですか?

答え: *name

公式チュートリアル4.9.2は、*name は **name より前になければならないと述べています。

到達チェック

  • *name がタプルを、**name が辞書を受け取ると言える
  • *name を **name より前に置く決まりを説明できる
  • *args の後ろの仮引数がキーワード専用になることを言える
  • 呼び出し側の * と ** がアンパックであると説明できる
  • 仮引数に対応した引数が、まとめ受けから外れることを言える

同じ資格で次に知りたいこと

よくある質問

Q*args と **kwargs の違いは何ですか?

A

*args は余った位置引数をタプルで、**kwargs は余ったキーワード引数を辞書で受け取ります。

Qargs と kwargs という名前は決まりですか?

A

働きを決めるのは * の数です。名前は慣習で、別の名前でも同じように動きます。

Q*args と **kwargs はどちらを先に書きますか?

A

公式チュートリアルは、*name は **name より前になければならないと述べています。

Q呼び出し側の f(*リスト) と f(**辞書) は何をしますか?

A

リストやタプルを個別の位置引数に、辞書をキーワード引数に展開して渡します。

次に見る比較

執筆: ミナト編集部(運営者情報を見る)