<一覧に戻る

可変長引数(args、*kwargs)

Pythonでは、関数を定義する際に引数の数を固定する必要がありません。可変長引数を使用することで、任意の数の引数を関数に渡すことができます。ここでは、*args**kwargsの使い方について詳しく説明します。

1. *args の使い方

*argsは、関数に可変数の位置引数を渡すための構文です。*を付けることで、引数をタプルとして受け取ります。

サンプルコード

def sum_numbers(*args):
    total = 0
    for num in args:
        total += num
    return total

result = sum_numbers(1, 2, 3, 4, 5)
print(result)  # 出力: 15

コード解説

  • def sum_numbers(*args):では、*argsを使って任意の数の引数を受け取る関数を定義しています。
  • argsはタプルとして受け取られ、関数内部でループを使って合計を計算しています。
  • 最後に、sum_numbers(1, 2, 3, 4, 5)と呼び出し、結果として15が出力されます。

2. **kwargs の使い方

**kwargsは、関数に可変数のキーワード引数を渡すための構文です。**を付けることで、引数を辞書として受け取ります。

サンプルコード

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

print_info(name="Alice", age=30, city="Tokyo")

コード解説

  • def print_info(**kwargs):では、**kwargsを使って任意の数のキーワード引数を受け取る関数を定義しています。
  • kwargsは辞書として受け取られ、items()メソッドを使ってキーと値のペアをループで出力しています。
  • print_info(name="Alice", age=30, city="Tokyo")と呼び出すと、以下のように出力されます。 name: Alice age: 30 city: Tokyo

3. *args**kwargs を同時に使う

*args**kwargsを同時に使用することもできます。この場合、位置引数を最初に書き、次に可変長引数、最後にキーワード引数を定義します。

サンプルコード

def describe_pet(pet_name, *args, **kwargs):
    print(f"ペットの名前: {pet_name}")
    if args:
        print("特性:")
        for trait in args:
            print(f"- {trait}")
    if kwargs:
        print("情報:")
        for key, value in kwargs.items():
            print(f"{key}: {value}")

describe_pet("Buddy", "元気", "愛らしい", age=5, breed="Golden Retriever")

コード解説

  • def describe_pet(pet_name, *args, **kwargs):では、ペットの名前と特性、さらに追加情報を受け取る関数を定義しています。
  • pet_nameは通常の引数、argsは特性を、kwargsはその他の情報(年齢、品種など)を受け取ります。
  • 最後の呼び出しdescribe_pet("Buddy", "元気", "愛らしい", age=5, breed="Golden Retriever")により、以下のように出力されます。
  ペットの名前: Buddy
  特性:
  - 元気
  - 愛らしい
  情報:
  age: 5
  breed: Golden Retriever

まとめ

  • *argsを使用すると、可変数の位置引数をタプルとして受け取ることができ、関数内で簡単に処理できます。
  • **kwargsを使用すると、可変数のキーワード引数を辞書として受け取り、柔軟な引数の扱いが可能となります。
  • 両者を組み合わせることで、非常に多様な引数を持つ関数を定義することができます。

このように、可変長引数を活用することで、より柔軟で再利用可能な関数を作成することができます。実際のプロジェクトでも積極的に利用してみてください。

出力結果: