Python関数の引数指定:位置引数とキーワード引数の違いと使い分け

Pythonで関数を呼び出す際、引数を渡す方法には「位置引数」と「キーワード引数」の2種類があります。

単純な関数であれば位置引数だけで十分ですが、引数の数が多い場合や、設定項目が複雑な関数の場合、キーワード引数を使うことでコードの可読性を劇的に向上させることができます。

この記事では、これら2つの引数の渡し方と、それらを併用する際のルールについて解説します。

目次

1. 位置引数(Positional Arguments)

位置引数は、関数定義時の引数の順番通りに値を渡す、最も基本的な方法です。

例として、ホテルの宿泊料金を計算する関数を作成します。

def calculate_hotel_fee(room_price, nights, service_fee, tax_rate):
    """
    宿泊料金を計算する関数
    """
    subtotal = (room_price * nights) + service_fee
    total = int(subtotal * (1 + tax_rate))
    return total

# 位置引数での呼び出し
# 引数の順番: 部屋代, 泊数, サービス料, 税率
payment = calculate_hotel_fee(12000, 3, 2000, 0.1)

print(f"支払総額: {payment}円")

実行結果:

支払総額: 41800円

この方法の欠点は、呼び出し側のコード calculate_hotel_fee(12000, 3, 2000, 0.1) を見ただけでは、それぞれの数字が何を意味しているのか(どれがサービス料で、どれが税率なのか)が直感的に分かりにくい点です。また、順番を間違えると誤った計算結果になります。

2. キーワード引数(Keyword Arguments)

キーワード引数は、関数を呼び出す際に 引数名=値 という形式で明示的に値を渡す方法です。

この方法を使うと、引数の順番を気にする必要がなくなり、コードの意味が明確になります。

# キーワード引数での呼び出し
# 順番を入れ替えても正しく動作する
payment_kw = calculate_hotel_fee(
    nights=3,
    room_price=12000,
    tax_rate=0.1,
    service_fee=2000
)

print(f"支払総額 (キーワード): {payment_kw}円")

実行結果:

支払総額 (キーワード): 41800円

nights=3tax_rate=0.1 と記述されているため、第三者がコードを読んでも意図がすぐに伝わります。引数が多い関数では、このキーワード引数の使用が推奨されます。

3. 位置引数とキーワード引数の併用

Pythonでは、一つの関数呼び出しの中で、位置引数とキーワード引数を混ぜて使用することも可能です。

ただし、重要なルールが一つあります。それは、**「必ず位置引数を先に記述し、キーワード引数はその後に記述しなければならない」**という点です。

# 正しい併用例
# 最初の2つを位置引数、残りをキーワード引数で渡す
payment_mixed = calculate_hotel_fee(12000, 3, tax_rate=0.1, service_fee=2000)

print(f"支払総額 (併用): {payment_mixed}円")

エラーになるケース

キーワード引数の後に位置引数を記述すると、SyntaxError(構文エラー)が発生します。

# 誤った併用例
# キーワード引数の後に位置引数 (2000) を書くことはできない
# payment_error = calculate_hotel_fee(12000, nights=3, 2000, 0.1)
# SyntaxError: positional argument follows keyword argument

まとめ

  • 位置引数: 定義順に値を渡します。記述は短いですが、引数の意味が分かりにくくなる場合があります。
  • キーワード引数: 引数名=値 で渡します。順序不同で、可読性が高くなります。
  • 併用: 位置引数を先に、キーワード引数を後に記述することで併用可能です。

特に引数が多い場合や、デフォルト値を持つ引数の一部だけを指定したい場合には、キーワード引数を積極的に活用することで、読みやすく保守しやすいコードになります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次