【Python】関数の引数のキーワード指定

【Python】関数の引数のキーワード指定

キーワード引数とは?

Pythonの関数には「位置引数(Positional Arguments)」と「キーワード引数(Keyword Arguments)」があります。キーワード引数とは、関数の引数を key=value の形式で渡す方法です。

例えば、次の関数を考えます。


def greet(name, message):
    print(f"{message}, {name}!")

通常の位置引数の使い方は以下のようになります。


greet("太郎", "こんにちは")  # 出力: こんにちは, 太郎!

キーワード引数を使うと、引数の順序に関係なく指定できます。


greet(message="おはよう", name="次郎")  # 出力: おはよう, 次郎!

デフォルト引数

デフォルト引数とは、関数の引数に初期値を設定できる仕組みです。


def greet(name, message="こんにちは"):
    print(f"{message}, {name}!")

この関数を呼び出すと、message を省略できます。


greet("太郎")  # 出力: こんにちは, 太郎!

もちろん、デフォルト引数を上書きすることも可能です。


greet("太郎", "おはよう")  # 出力: おはよう, 太郎!

可変長引数( *args, **kwargs )

関数に渡す引数の数が変化する場合、*args**kwargs を使います。

*args(可変長の位置引数)

*args は任意の数の位置引数をタプルとして受け取ります。


def add_numbers(*args):
    return sum(args)

print(add_numbers(1, 2, 3))  # 出力: 6
print(add_numbers(10, 20, 30, 40))  # 出力: 100

**kwargs(可変長のキーワード引数)

**kwargs は任意の数のキーワード引数を辞書として受け取ります。


def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="太郎", age=25, city="東京")

出力:


name: 太郎
age: 25
city: 東京

キーワード専用引数

Python 3 以降では、特定の引数をキーワード引数としてのみ受け取ることができます。


def greet(*, name, message="こんにちは"):
    print(f"{message}, {name}!")

この関数は、namemessage をキーワード引数としてのみ受け付けます。


greet(name="太郎")  # 出力: こんにちは, 太郎!
greet(name="太郎", message="おはよう")  # 出力: おはよう, 太郎!

位置引数で指定するとエラーになります。


greet("太郎")  # TypeError: greet() missing 1 required keyword-only argument: 'name'

位置引数とキーワード引数の順序

関数を定義するとき、引数の順序にはルールがあります。

  • 位置引数
  • デフォルト引数
  • *args
  • キーワード専用引数
  • **kwargs

例えば、次の関数は正しい順序で引数を定義しています。


def sample_func(a, b=10, *args, c=20, **kwargs):
    print(a, b, args, c, kwargs)

キーワード引数の活用例

辞書を使ったキーワード引数の展開


def greet(name, message):
    print(f"{message}, {name}!")

data = {"name": "太郎", "message": "こんばんは"}
greet(**data)  # 出力: こんばんは, 太郎!

オプション設定を受け取る

キーワード引数を活用すると、設定を柔軟に扱えます。


def configure_system(**settings):
    for key, value in settings.items():
        print(f"設定 {key} = {value}")

configure_system(theme="dark", language="ja", volume=80)

出力:


設定 theme = dark
設定 language = ja
設定 volume = 80

デフォルト引数を活用した柔軟な関数


def send_email(to, subject="No Subject", body=""):
    print(f"To: {to}\nSubject: {subject}\nBody: {body}")

send_email("user@example.com")

キーワード引数を使うことで、柔軟な関数を定義し、使いやすさを向上できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です