【Python入門】関数の引数をもっと便利に!デフォルト値・可変長引数・辞書形式の使い方

はじめに

Pythonで関数を定義するとき、ただ引数を並べるだけじゃもったいない!
実は「デフォルト値」や「可変長引数(*args, **kwargs)」を使えば、もっと柔軟で読みやすいコードが書けます。

今回は「ログ出力関数」を例に、初心者でも分かりやすいように解説していきます。


やりたいこと

  1. 関数にデフォルト値を設定して、省略可能な引数を作る

  2. *args で複数の引数をまとめて受け取る

  3. **kwargs で辞書形式の引数を受け取る

  4. 実務的な例として、ログ出力関数を便利に設計する


準備するもの

ライブラリ

今回は標準機能だけで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 で柔軟に辞書形式の引数を扱える

  • 実務例として「ログ出力関数」に応用できる

これをマスターすると「関数の設計力」がグッと上がります。
私自身も実務でログ関数を作るときや、可変なデータを扱う関数を書くときによく使っています。

コメント

タイトルとURLをコピーしました