
【6日でできるPython入門】関数②
前のコンテンツ「関数①」ではPython関数の基本的な定義方法や使い方を学びましたが、実際のプログラミングでは「柔軟に値を受け取る関数」を作りたい場面が多くあります。
ここでは、「デフォルト引数」や「**可変長引数(*args, kwargs)」、「キーワード専用引数」など、より高度な関数定義の方法を身につけます。
これらのテクニックを理解することで、呼び出しやすく、拡張性の高い関数を自在に設計できるようになります。

1.デフォルト引数
1.1. デフォルト値付きの引数
関数定義時に引数に「デフォルト値(初期値)」を設定すると、値を省略した場合にその初期値が使われます。
ファイル名: lesson18-1.py
def send_message(user="ゲスト", message="メッセージがありません"):
print(f"{user}さんへのメッセージ: {message}")
# 呼び出し例
send_message()
send_message("田中")
send_message(message="おはようございます")
send_message("佐藤", "今日の予定を確認してください")
実行結果
ゲストさんへのメッセージ: メッセージがありません
田中さんへのメッセージ: メッセージがありません
ゲストさんへのメッセージ: おはようございます
佐藤さんへのメッセージ: 今日の予定を確認してください
解説
user="ゲスト"
のように定義しておくと、呼び出し時に値を省略できて便利です。- デフォルト引数は、必ず普通の引数よりも後ろに書きます。
1.2. デフォルト引数の注意点とエラー例
デフォルト引数の前に、デフォルトなしの引数を書く必要があります。逆にするとエラーです。
ファイル名: lesson18-2.py
# 間違った例
# def greet(name="名無し", age): # ←これはエラー
# print(f"{name}さん、{age}歳です。")
実行結果
SyntaxError: non-default argument follows default argument
2.可変長引数
2.1. 可変長位置引数(*args)
複数の引数をまとめて受け取るには、*
を付けた可変長位置引数を使います。
ファイル名: lesson18-3.py
def print_items(*items):
print("渡されたアイテム一覧:")
for i, item in enumerate(items, 1):
print(f"{i}. {item}")
print_items("リンゴ", "バナナ", "オレンジ")
print_items("みかん")
実行結果
渡されたアイテム一覧:
1. リンゴ
2. バナナ
3. オレンジ
渡されたアイテム一覧:
1. みかん
解説
*items
は受け取った値をタプルとして格納します。enumerate(items, 1)
で番号付きで表示しています。
2.2. 普通の引数・デフォルト引数との組み合わせ
可変長引数を他の引数と組み合わせる場合は、順番に注意します。
ファイル名: lesson18-4.py
def register_user(first, *nicknames, country="日本"):
print(f"本名: {first}")
print(f"ニックネーム: {', '.join(nicknames) if nicknames else 'なし'}")
print(f"国籍: {country}")
register_user("山田", "やまちゃん", "ヤマピー", country="アメリカ")
register_user("鈴木")
実行結果
本名: 山田
ニックネーム: やまちゃん, ヤマピー
国籍: アメリカ
本名: 鈴木
ニックネーム: なし
国籍: 日本
3.可変長キーワード引数(**kwargs)
3.1. 任意のキーワード引数を受け取る
**
を使うと、キーワード(名前付き)の任意個の引数を辞書として受け取れます。
ファイル名: lesson18-5.py
def show_profile(**profile):
print("プロフィール情報:")
for key, value in profile.items():
print(f"{key}:{value}")
show_profile(名前="田中", 年齢=30, 血液型="A型")
show_profile(名前="佐藤", 趣味="ランニング", 職業="エンジニア")
実行結果
プロフィール情報:
名前:田中
年齢:30
血液型:A型
プロフィール情報:
名前:佐藤
趣味:ランニング
職業:エンジニア
解説
**profile
は渡されたキーワード引数をすべて辞書にまとめてくれます。
3.2. argsとkwargsの組み合わせ
ファイル名: lesson18-6.py
すべてのパターンに対応した関数も作れます。
def full_info(*args, **kwargs):
print("引数リスト:", args)
print("キーワード引数:", kwargs)
full_info("A", "B", X=1, Y=2)
実行結果
引数リスト: ('A', 'B')
キーワード引数: {'X': 1, 'Y': 2}
4.キーワード専用引数
4.1. 「*」より後ろはキーワード専用
「*」以降の引数は、キーワードでしか値を指定できません。
ファイル名: lesson18-7.py
def make_report(title, *, author="匿名", date="不明"):
print(f"レポートタイトル: {title}")
print(f"著者: {author}")
print(f"日付: {date}")
make_report("Python入門")
make_report("関数の応用", author="山本", date="2025年5月")
# make_report("エラー例", "佐藤") # ←これはエラーになる
実行結果
レポートタイトル: Python入門
著者: 匿名
日付: 不明
レポートタイトル: 関数の応用
著者: 山本
日付: 2025年5月
解説
*
より後ろの引数は「author=」「date=」のように必ずキーワード指定しないといけません。- 引数が多くなる場合、間違いを防げます。
まとめ表:さまざまな関数の引数指定方法
書き方 | 説明 | 例 |
---|---|---|
def f(a=10): | デフォルト引数 | f(), f(20) |
def f(*args): | 可変長位置引数 | f(1, 2, 3) |
def f(**kwargs): | 可変長キーワード引数 | f(x=1, y=2) |
def f(a, *b, c=0): | 位置・可変長・デフォルト引数の組み合わせ | f(1, 2, 3, c=4) |
def f(a, *, b=0): | キーワード専用引数(*以降はキーワードのみ) | f(1, b=2) |
ここでは、柔軟で拡張性のある関数の作り方を学びました。