はじめに
Pythonで関数を定義するとき、ただ引数を並べるだけじゃもったいない!
実は「デフォルト値」や「可変長引数(*args, **kwargs)」を使えば、もっと柔軟で読みやすいコードが書けます。
今回は「ログ出力関数」を例に、初心者でも分かりやすいように解説していきます。
やりたいこと
-
関数にデフォルト値を設定して、省略可能な引数を作る
-
*argsで複数の引数をまとめて受け取る -
**kwargsで辞書形式の引数を受け取る -
実務的な例として、ログ出力関数を便利に設計する
準備するもの
ライブラリ
今回は標準機能だけでOK!特別なライブラリは不要です。
コードスクリプト
コードスクリプトの概要
ここから実際に「デフォルト値」「*args」「**kwargs」の3つを使って関数を書いていきます。
最後にそれらを組み合わせた「ログ出力関数」を作って、実際の使い方を試してみましょう。
デフォルト引数の使い方
def greet(name, message="こんにちは"):
print(f"{name}さん、{message}")
greet("花子") # 引数を省略 → デフォルト値が使われる
greet("太郎", "お疲れさま") # メッセージを指定
コード解説
-
message="こんにちは"としておくと、省略した場合に「こんにちは」が使われます。 -
毎回同じメッセージを入力する手間が省けます。
*args の使い方
def add_numbers(*args):
total = sum(args)
print("合計:", total)
add_numbers(1, 2, 3)
add_numbers(5, 10, 15, 20)
コード解説
-
*argsは「複数の引数をまとめてタプルにして受け取る」仕組みです。 -
何個渡しても受け取れるので、柔軟な関数が作れます。
**kwargs の使い方
def print_user_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_user_info(name="花子", age=25, city="Tokyo")
コード解説
-
**kwargsは「辞書形式の引数」を受け取ります。 -
関数呼び出し側で
key=value形式にすれば、自由にデータを渡せます。
実務例:ログ出力関数
def log(message, level="INFO", *args, **kwargs):
print(f"[{level}] {message}")
if args:
print("追加情報:", args)
if kwargs:
print("詳細設定:", kwargs)
# 使用例
log("処理を開始しました")
log("ファイルを読み込みました", "DEBUG", "file.csv", "encoding=UTF-8")
log("ユーザー情報更新", "INFO", user="hanako", status="success")
実行結果
[INFO] 処理を開始しました
[DEBUG] ファイルを読み込みました
追加情報: ('file.csv', 'encoding=UTF-8')
[INFO] ユーザー情報更新
詳細設定: {'user': 'hanako', 'status': 'success'}
コード解説
-
level="INFO"→ ログレベルのデフォルト値を設定 -
*args→ ファイル名や補足情報をまとめて渡せる -
**kwargs→ ユーザーやステータスなど、キー付きの情報を渡せる -
実務でよく使うログ関数を柔軟に設計できます!
注意点
-
デフォルト引数は「可変オブジェクト(リストや辞書)」を使うと意図しない挙動になることがあるので注意。
def add_item(item, items=[]): # ← NG items.append(item) return items
こうすると、呼び出すたびにリストが共有されてしまいます。
✅ 解決策: None を使って初期化する
def add_item(item, items=None): if items is None: items = [] items.append(item) return items
まとめ
今回は関数の便利な引数の使い方を紹介しました。
-
デフォルト値で省略可能な引数を作れる
-
*argsで複数の引数をまとめて受け取れる -
**kwargsで柔軟に辞書形式の引数を扱える -
実務例として「ログ出力関数」に応用できる
これをマスターすると「関数の設計力」がグッと上がります。
私自身も実務でログ関数を作るときや、可変なデータを扱う関数を書くときによく使っています。



コメント