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=3 や tax_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
まとめ
- 位置引数: 定義順に値を渡します。記述は短いですが、引数の意味が分かりにくくなる場合があります。
- キーワード引数:
引数名=値で渡します。順序不同で、可読性が高くなります。 - 併用: 位置引数を先に、キーワード引数を後に記述することで併用可能です。
特に引数が多い場合や、デフォルト値を持つ引数の一部だけを指定したい場合には、キーワード引数を積極的に活用することで、読みやすく保守しやすいコードになります。
