【Python】第3章第3回:デフォルト引数と可変長引数
本記事では、Pythonにおけるデフォルト引数と可変長引数の使い方を学びます。これらの機能を活用することで、関数を柔軟かつ効率的に設計できるようになります。
0. 記事の概要
この記事を読むメリット
- デフォルト引数の仕組みを理解:引数の省略時の動作を制御できます。
- 可変長引数の応用を習得:柔軟な関数の設計方法が学べます。
- 実践的なスキルの向上:複数のパラメータを扱う関数を効率的に設計できます。
この記事で学べること
- デフォルト引数の基本と応用
- 可変長引数(*args, **kwargs)の使い方
- デフォルト引数と可変長引数を組み合わせた応用例
1. デフォルト引数の基本
1.1 デフォルト引数とは?
デフォルト引数とは、関数定義時に初期値を設定しておくことで、呼び出し時に引数を省略した場合でも動作を保証する仕組みです。
# デフォルト引数の例
def greet(name="ゲスト"):
print(f"こんにちは、{name}さん!")
greet()
greet("太郎")
動作解説
def greet(name="ゲスト"):
: 引数name
にデフォルト値"ゲスト"
を設定します。- 引数が渡されない場合、デフォルト値が使用されます。
- 引数が渡された場合、その値が優先されます。
1.2 注意点
デフォルト引数は、関数定義時に一度だけ評価されるため、list
やdict
などの可変オブジェクトを使用する際には注意が必要です。
# デフォルト引数の注意点
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] 共有されるため注意
動作解説
- デフォルト値の
my_list=[]
が複数回の関数呼び出しで共有されます。 - 新しいリストを作成する場合、デフォルト値に
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}")
動作解説
*args
で受け取った引数はタプルとして扱われます。sum(args)
で引数の合計を計算します。- 任意の数の引数を渡すことが可能です。
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="東京")
動作解説
**kwargs
で受け取った引数は辞書として扱われます。kwargs.items()
でキーと値を順に取得します。- 渡されたすべてのキーワード引数が処理されます。
3. 応用例:デフォルト引数と可変長引数の組み合わせ
デフォルト引数と可変長引数を組み合わせて、柔軟な関数を作成します。
# デフォルト引数と可変長引数の組み合わせ
def greet_users(greeting="こんにちは", *names):
for name in names:
print(f"{greeting}、{name}さん!")
greet_users("おはよう", "太郎", "花子", "次郎")
greet_users(*["太郎", "花子"])
動作解説
greeting
にデフォルト値を設定し、*names
で任意の数の引数を受け取ります。- 引数がリストで渡される場合、アンパック(
*
)して渡します。
4. 練習問題
以下の課題に挑戦してみましょう。
- 任意の数の数値を受け取り、その最大値と最小値を返す関数を作成してください。
- 任意の数のキーワード引数を受け取り、その内容をフォーマットして出力する関数を作成してください。
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. まとめ
デフォルト引数と可変長引数を使うことで、関数を柔軟に設計できます。基本を押さえた上で、応用的な使い方にも挑戦してください。