キーワード引数

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

このレッスンで分かること

  • キーワード引数は 関数(引数名=値) の形で名前指定して渡す書き方です
  • 位置引数 → キーワード引数の順序を守らないと SyntaxError になります
  • 最小例は def area(width=1, height=1): return width * height (area(width=5, height=3)15)

キーワード引数 とは

引数を名前で指定するキーワード引数の使い方を学びます。本レッスンでは、キーワード引数 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

キーワード引数

関数に引数を渡すとき、Python には 2 つの渡し方があります。位置で渡す 位置引数 (positional argument) と、名前で渡す キーワード引数 (keyword argument) です。前者は順番が命、後者は名前を書くので順番が自由になります。読みやすくて安全なコードを書くには、両方をうまく使い分ける必要があります。

キーワード引数を使うと、呼び出し側のコードが「自己ドキュメント化」されます。引数の意味がコードを読むだけで分かるからです。

文法

キーワード引数は、呼び出し時に 引数名=値 の形式で書きます。

Python

def build_url(host, port, protocol): return f"{protocol}://{host}:{port}" url = build_url(host="example.com", port=8080, protocol="https") print(url)

このコードでは host port protocol を名前で指定しています。順番を入れ替えても結果は同じです。

Python

url = build_url(protocol="https", port=8080, host="example.com")

位置引数と違い、引数名=値 のペアを直接書くので、port=8080host の位置に書いてしまうような事故が防げます。

位置引数とキーワード引数の混在

両者を混ぜて使うこともできます。ただし、位置引数を先に、キーワード引数を後に書くというルールがあります。

Python

build_url("example.com", port=8080, protocol="https")

逆順 (build_url(host="example.com", 8080, "https")) は SyntaxError です。

呼び出し方結果
位置だけbuild_url("example.com", 8080, "https")OK
キーワードだけbuild_url(host="example.com", port=8080, protocol="https")OK
位置 → キーワードbuild_url("example.com", port=8080, protocol="https")OK
キーワード → 位置build_url(host="example.com", 8080, "https")SyntaxError

「位置 → キーワード」の順番を守る。これだけは覚えておきましょう。

動きを追ってみる

位置引数とキーワード引数がどう紐付くかを図にしてみます。

diagram (will load when visible)

評価の流れを箇条書きで言い換えると、次のとおりです。

  • 呼び出し時の引数を順番に取り出す
  • 名前=値 の形なら、関数定義の同名パラメータに紐付ける
  • そうでなければ、まだ埋まっていない位置パラメータに順に詰める
  • 全パラメータが埋まったら関数本体を実行、足りなければ TypeError

Python のインタプリタは呼び出しのたびにこの紐付けを行います。

キーワード引数のメリット

キーワード引数を使うメリットは次のとおりです。

  • 引数の意味がコードから読み取れる
  • 順番を覚えなくて良い
  • デフォルト引数の一部だけを上書きできる
  • 引数を増やしたときも既存コードを壊しにくい

3 つ目は特に便利です。

Python

def connect(host, port=80, timeout=30, retries=3): return (host, port, timeout, retries) connect("example.com", retries=5)

porttimeout はデフォルト値のまま、retries だけ上書きしています。位置引数だけだと、間にある porttimeout を全部書く必要がありますが、キーワード引数なら必要なものだけ指定できます。

実例

少し実践的な例を見てみましょう。グラフを描画する関数の color linestyle marker などはキーワード引数で渡すのが一般的です。

Python

def plot(x, y, color="blue", linestyle="-", marker=None): return {"x": x, "y": y, "color": color, "linestyle": linestyle, "marker": marker} result = plot([1, 2, 3], [4, 5, 6], color="red", marker="o") print(result)

位置引数 x y の後に、colormarker だけキーワードで指定しています。linestyle はデフォルトのままです。

よくある間違い

  • 位置引数より前にキーワード引数を書いてしまう
  • 同じ引数を 2 回指定してしまう (TypeError: multiple values for argument)
  • 関数定義にない名前で呼び出してしまう (TypeError: unexpected keyword argument)

2 つ目は典型的な事故です。

Python

def hello(name): return f"Hi {name}" hello("Taro", name="Jiro")

位置で "Taro" を渡してから、キーワードでも name="Jiro" を渡しているので、エラーになります。

同じ引数を 2 回指定するのは、コードを後から書き換えたときに発生しがちです。エラーメッセージを読めばすぐに原因が分かります。

この章のポイント

ここまでの要点 キーワード引数は 引数名=値 の形、順番自由で読みやすい。位置 → キーワードの順序を守らないと SyntaxError。同じ引数を二重指定すると TypeError

やってみよう

それでは、widthheight を引数に取り、width * height の長方形の面積を返す関数 area を書いてみましょう。手順は次のとおりです。

  1. def area(width=1, height=1): でデフォルト引数 1 を持たせて定義する
  2. width * heightreturn する
  3. テストで area(width=5, height=3)15 を返すことを確認する

両方ともデフォルト値 1 を持たせ、呼び出し側でキーワード引数として渡せるようにしてください。テストでは area(width=5, height=3) のような形で呼び出されます。

よくある質問

Q. このトピックは Python 以外の言語でも同じ書き方ですか?

A. 考え方は他言語と共通ですが、構文や標準ライブラリは異なります。Python はインデントでブロックを表し、コロン + 改行で構造を作るのが特徴です。他言語に移行する際は基本概念を維持しつつ、構文の差分を意識して書き換えると混乱が少ないです。

Q. 実行してエラーが出た場合の対処は?

A. エラーメッセージの最後の行(TypeError や NameError などの型)から原因と該当行を確認します。Python はトレースバックが下から上に読むと「呼び出し元 → 内部」の順で辿れます。print や IDE のデバッガで途中の変数を確認すると原因が見えてきます。

Q. 次のステップで何を学ぶべきですか?

A. 本レッスンの内容を理解できたら、本文の「やってみよう」を実装し、章末クイズに進むのがおすすめです。さらに自分のミニアプリ(電卓・todo・スコア集計など)に応用するとスキルが定着します。詰まったら本文の H2 セクションに戻って読み返してください。

次のレッスン

次は 可変長引数 args と kwargs で、引数を名前で指定するキーワード引数の使い方を学びます を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. キーワード引数 の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. キーワード引数 とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

要件

  1. area 関数を定義する
  2. width と height のデフォルト値を 1 にする
  3. width * height を return する

入出力例

test-cases.txt

area(5, 3)15 area()1 area(4)4 area(10, 10)100

ヒント

main.py
main.py
学習モード

メモ

キーワード引数

⌘S で保存