【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}!")
この関数は、name
と message
をキーワード引数としてのみ受け付けます。
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")
キーワード引数を使うことで、柔軟な関数を定義し、使いやすさを向上できます。