未分類

【Python】第3章第3回:デフォルト引数と可変長引数

本記事では、Pythonにおけるデフォルト引数と可変長引数の使い方を学びます。これらの機能を活用することで、関数を柔軟かつ効率的に設計できるようになります。

0. 記事の概要

この記事を読むメリット

  • デフォルト引数の仕組みを理解:引数の省略時の動作を制御できます。
  • 可変長引数の応用を習得:柔軟な関数の設計方法が学べます。
  • 実践的なスキルの向上:複数のパラメータを扱う関数を効率的に設計できます。

この記事で学べること

  • デフォルト引数の基本と応用
  • 可変長引数(*args, **kwargs)の使い方
  • デフォルト引数と可変長引数を組み合わせた応用例

1. デフォルト引数の基本

1.1 デフォルト引数とは?

デフォルト引数とは、関数定義時に初期値を設定しておくことで、呼び出し時に引数を省略した場合でも動作を保証する仕組みです。

# デフォルト引数の例
def greet(name="ゲスト"):
    print(f"こんにちは、{name}さん!")

greet()
greet("太郎")
動作解説
  1. def greet(name="ゲスト"):: 引数nameにデフォルト値"ゲスト"を設定します。
  2. 引数が渡されない場合、デフォルト値が使用されます。
  3. 引数が渡された場合、その値が優先されます。

1.2 注意点

デフォルト引数は、関数定義時に一度だけ評価されるため、listdictなどの可変オブジェクトを使用する際には注意が必要です。

# デフォルト引数の注意点
def append_to_list(value, my_list=[]):
    my_list.append(value)
    return my_list

print(append_to_list(1))  # [1]
print(append_to_list(2))  # [1, 2] 共有されるため注意
動作解説
  1. デフォルト値のmy_list=[]が複数回の関数呼び出しで共有されます。
  2. 新しいリストを作成する場合、デフォルト値にNoneを設定し、関数内で初期化します。

2. 可変長引数の基本

2.1 *argsを使った可変長引数

*argsを使用すると、任意の数の位置引数をタプルとして受け取ることができます。

# *argsを使った関数
def sum_numbers(*args):
    return sum(args)

result = sum_numbers(1, 2, 3, 4, 5)
print(f"合計: {result}")
動作解説
  1. *argsで受け取った引数はタプルとして扱われます。
  2. sum(args)で引数の合計を計算します。
  3. 任意の数の引数を渡すことが可能です。

2.2 **kwargsを使った可変長キーワード引数

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

# **kwargsを使った関数
def print_user_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_user_info(name="太郎", age=25, city="東京")
動作解説
  1. **kwargsで受け取った引数は辞書として扱われます。
  2. kwargs.items()でキーと値を順に取得します。
  3. 渡されたすべてのキーワード引数が処理されます。

3. 応用例:デフォルト引数と可変長引数の組み合わせ

デフォルト引数と可変長引数を組み合わせて、柔軟な関数を作成します。

# デフォルト引数と可変長引数の組み合わせ
def greet_users(greeting="こんにちは", *names):
    for name in names:
        print(f"{greeting}、{name}さん!")

greet_users("おはよう", "太郎", "花子", "次郎")
greet_users(*["太郎", "花子"])
動作解説
  1. greetingにデフォルト値を設定し、*namesで任意の数の引数を受け取ります。
  2. 引数がリストで渡される場合、アンパック(*)して渡します。

4. 練習問題

以下の課題に挑戦してみましょう。

  1. 任意の数の数値を受け取り、その最大値と最小値を返す関数を作成してください。
  2. 任意の数のキーワード引数を受け取り、その内容をフォーマットして出力する関数を作成してください。

5. 練習問題の解答と解説

問1の解答例

# 最大値と最小値を返す関数
def find_max_and_min(*args):
    return max(args), min(args)

max_value, min_value = find_max_and_min(10, 5, 20, 15)
print(f"最大値: {max_value}, 最小値: {min_value}")

問2の解答例

# キーワード引数をフォーマット
def format_kwargs(**kwargs):
    return ", ".join(f"{key}: {value}" for key, value in kwargs.items())

formatted = format_kwargs(name="太郎", age=25, city="東京")
print(f"フォーマット結果: {formatted}")

6. まとめ

デフォルト引数と可変長引数を使うことで、関数を柔軟に設計できます。基本を押さえた上で、応用的な使い方にも挑戦してください。