【Python】関数の可変長引数

【Python】関数の可変長引数

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

Pythonでは、関数に渡す引数の数が決まっていない場合に*argsを使用できます。 *argsはタプルとして受け取られるため、複数の値を可変長で渡すことができます。

基本的な使用例


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

print(sum_numbers(1, 2, 3, 4))  # 10
print(sum_numbers(10, 20))      # 30
print(sum_numbers())            # 0

ループを用いた処理


def print_names(*names):
    for name in names:
        print(f"こんにちは、{name}さん!")

print_names("太郎", "花子", "次郎")

デフォルト引数と組み合わせる


def greet(message, *names):
    for name in names:
        print(f"{message}, {name}!")

greet("おはよう", "田中", "佐藤", "鈴木")

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

**kwargsを使用すると、関数は任意の数のキーワード引数を辞書として受け取ることができます。

基本的な使用例


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

person_info(name="田中", age=30, city="東京")

辞書を利用する


data = {"name": "佐藤", "age": 25, "job": "エンジニア"}

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

display_info(**data)

*argsと**kwargsの組み合わせ

*args**kwargsを同時に使うことで、位置引数とキーワード引数の両方を柔軟に受け取ることができます。


def example_function(*args, **kwargs):
    print("位置引数:", args)
    print("キーワード引数:", kwargs)

example_function(1, 2, 3, name="山田", age=40)

順番に注意

関数定義の際、引数の順番は次のようにする必要があります:

  • 通常の引数
  • *args(可変長位置引数)
  • 通常のキーワード引数
  • **kwargs(可変長キーワード引数)

def correct_order(a, b, *args, x=10, y=20, **kwargs):
    print(a, b, args, x, y, kwargs)

correct_order(1, 2, 3, 4, x=50, y=60, z=100)

可変長引数の応用例

複数の数値を受け取り計算


def multiply(*numbers):
    result = 1
    for num in numbers:
        result *= num
    return result

print(multiply(2, 3, 4))  # 24

辞書のマージ


def merge_dicts(**dicts):
    merged = {}
    for key, value in dicts.items():
        merged[key] = value
    return merged

print(merge_dicts(a=1, b=2, c=3))

デコレーターでの活用


def debug(func):
    def wrapper(*args, **kwargs):
        print(f"呼び出し: {func.__name__}({args}, {kwargs})")
        return func(*args, **kwargs)
    return wrapper

@debug
def add(a, b):
    return a + b

print(add(3, 5))

可変長引数の注意点

辞書のキーは文字列のみ


def invalid_kwargs(**kwargs):
    for key in kwargs:
        print(key, kwargs[key])

# invalid_kwargs(123="数値キー")  # エラーになる

可変長引数を辞書やリストで展開


def greet(name, age):
    print(f"私は{name}です。{age}歳です。")

data = ("田中", 30)
greet(*data)  # リスト・タプルを展開

data_dict = {"name": "佐藤", "age": 40}
greet(**data_dict)  # 辞書を展開

可変長引数のデフォルト値


def func(*args):
    args = args or ("デフォルト",)
    print(args)

func()  # ('デフォルト',)
func(1, 2, 3)  # (1, 2, 3)

Pythonの可変長引数を適切に活用すれば、汎用的で柔軟な関数を定義することができます。

コメントを残す

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