Pythonで関数(Function)を使いこなせると、コードの品質が一気に上がります。この記事では def 文によるPython関数の定義方法から、引数・デフォルト値・return文・スコープ・可変長引数まで、初心者が迷いやすいポイントを丁寧に解説します。
Pythonをシリーズで基礎から学んでいる方は、前回の 【Python入門】リスト・辞書などのコレクションを完全解説(Part 5) もあわせてご覧ください。順番に読み進めると理解がスムーズです!
関数(Function)とは?料理レシピで理解するイメージ

関数とは、特定の処理をひとまとまりにした再利用可能なコードのブロックです。同じ処理を何度も書く代わりに、一度関数として定義しておけば何度でも呼び出せます。
料理に例えると、「カレーの作り方」というレシピ(=関数の定義)を一度書いておけば、「今日もカレーを作って!」と呼び出すだけで毎回同じ手順を踏めますよね。レシピを毎回イチから書く必要はないわけです。
プログラミングではこれを DRY原則(Don’t Repeat Yourself) と呼びます。「同じことを繰り返すな」という考え方で、関数はその代表的な実現手段です。関数を使うと次のようなメリットがあります。
- ✅ コードの再利用:同じ処理を何度も書かなくてOK
- ✅ 可読性アップ:処理に名前がつくので読みやすくなる
- ✅ メンテナンスが楽:修正は関数の中だけ変えればいい
- ✅ デバッグしやすい:処理を分割することでバグの特定が早くなる
Pythonで関数を定義する基本構文(def文)
Pythonで関数を定義するには def キーワードを使います。「define(定義する)」の略です。基本的な書き方は次のとおりです。
# ▼ 関数の定義(レシピを書く)
def greet(name):
message = f"こんにちは、{name}さん!"
return message
# ▼ 関数の呼び出し(レシピを使う)
result = greet("田中")
print(result) # → こんにちは、田中さん!
result2 = greet("鈴木")
print(result2) # → こんにちは、鈴木さん!
たった一度 greet() を定義するだけで、何度でも違う名前で呼び出せます。これが関数の強みです。
def文の構文ルール:押さえておくべき4つのポイント
- ①
def 関数名(引数):で定義スタート(末尾のコロン:を忘れずに!) - ② インデント(字下げ)した部分が関数の中身になる(スペース4つが慣習)
- ③
returnで呼び出し元に値を返す(省略するとNoneが返る) - ④ 関数名に
()をつけることで呼び出せる
引数(Arguments)の使い方:関数への「入力」を理解しよう
引数とは、関数を呼び出すときに渡す「入力データ」のことです。電卓に例えると、「100 + 200」の 100と200が引数、計算結果の300が戻り値(return値)というイメージです。
複数の引数を受け取る関数
引数はカンマ区切りで複数受け取れます。
def introduce(name, age, hobby):
return f"私は{name}です。{age}歳で、趣味は{hobby}です。"
print(introduce("田中", 25, "読書"))
# → 私は田中です。25歳で、趣味は読書です。
print(introduce("鈴木", 30, "登山"))
# → 私は鈴木です。30歳で、趣味は登山です。
キーワード引数(Keyword Arguments):順番を気にしなくていい!
引数名を明示して渡すと、順番を気にせずに呼び出せます。これをキーワード引数と呼びます。引数が多い関数を呼び出すときに特に便利です。
def introduce(name, age, hobby):
return f"私は{name}です。{age}歳で、趣味は{hobby}です。"
# キーワード引数を使うと順番が違ってもOK
print(introduce(hobby="登山", name="鈴木", age=30))
# → 私は鈴木です。30歳で、趣味は登山です。
デフォルト値(Default Arguments):省略できる引数を作ろう
引数にデフォルト値を設定しておくと、呼び出し時にその引数を省略できます。よく使う値を事前に決めておきたいときに便利です。
def greet(name, greeting="こんにちは"):
return f"{greeting}、{name}さん!"
print(greet("田中")) # → こんにちは、田中さん!(デフォルト値が使われる)
print(greet("鈴木", "おはよう")) # → おはよう、鈴木さん!(上書きされる)
⚠️ デフォルト値を持つ引数は、必ず通常の引数より後ろに書く必要があります。そうしないと SyntaxError になります。
# NG例:デフォルト値あり引数が先にある
# def greet(greeting="こんにちは", name): # SyntaxError!
# OK例:デフォルト値あり引数は後ろに
def greet(name, greeting="こんにちは"): # ✅ 正しい順番
return f"{greeting}、{name}さん!"
return文の使い方:関数の「出力」を理解しよう
return 文は関数の処理結果を呼び出し元に返すための命令です。いくつかの重要なポイントを押さえておきましょう。
returnを省略すると「None」が返る
def say_hello(name):
print(f"こんにちは、{name}さん!") # printするだけ、returnなし
result = say_hello("田中")
# → こんにちは、田中さん!(printは実行される)
print(result) # → None(returnがないのでNoneが返る)
複数の値をまとめて返す
Pythonでは return で複数の値をカンマ区切りで返せます。内部的にはタプルとして返されます。
def min_max(numbers):
return min(numbers), max(numbers) # 2つの値を返す
smallest, largest = min_max([3, 1, 4, 1, 5, 9, 2, 6])
print(f"最小値: {smallest}, 最大値: {largest}")
# → 最小値: 1, 最大値: 9
スコープ(Scope):変数の「有効範囲」を理解しよう
スコープとは、変数が使える範囲のことです。関数の中で作った変数は、関数の外からはアクセスできません。
def my_function():
local_var = "私は関数内の変数です" # ローカル変数
print(local_var) # → 関数内ではアクセスできる
my_function()
# print(local_var) # → NameError! 関数の外からはアクセスできない
一方、関数の外で定義した変数(グローバル変数)は、関数の内側からも参照できます。ただし、関数内でグローバル変数を書き換えるには global キーワードが必要です。
count = 0 # グローバル変数
def increment():
global count # グローバル変数を書き換えることを宣言
count += 1
increment()
increment()
print(count) # → 2
💡 グローバル変数の多用はバグの原因になりやすいため、基本的には return で値を受け渡す設計を心がけましょう。
可変長引数(*args・**kwargs):引数の数が決まらないときに便利
引数の数があらかじめ決まらない場合は、可変長引数を使います。*args と **kwargs の2種類があります。それぞれの詳しい使い方は専用の解説記事をご覧ください。
- 📄 【Python】*args(可変長位置引数)の使い方を徹底解説
- 📄 【Python】**kwargs(可変長キーワード引数)の使い方を徹底解説
ここでは基本的な使い方のみ紹介します。
*args:任意の数の位置引数を受け取る
def total(*args):
return sum(args) # argsはタプルとして受け取られる
print(total(1, 2, 3)) # → 6
print(total(10, 20, 30, 40)) # → 100
**kwargs:任意の数のキーワード引数を受け取る
def show_profile(**kwargs):
for key, value in kwargs.items(): # kwargsは辞書として受け取られる
print(f"{key}: {value}")
show_profile(name="田中", age=25, hobby="読書")
# → name: 田中
# → age: 25
# → hobby: 読書
関数の応用:よく使うパターンをマスターしよう
関数の中で関数を呼ぶ(関数の組み合わせ)
関数は組み合わせて使うことで、より複雑な処理を整理して書けます。
def square(n):
return n ** 2
def sum_of_squares(numbers):
return sum(square(n) for n in numbers) # square()を内部で呼び出す
print(sum_of_squares([1, 2, 3, 4])) # → 30(1+4+9+16)
早期return(ガード節)でネストを減らす
条件が満たされない場合に早めに return することで、ネストが深くなるのを防げます。可読性が大きく向上するテクニックです。
# NG例:ネストが深い
def divide_bad(a, b):
if b != 0:
result = a / b
return result
else:
return "ゼロ除算エラー"
# OK例:早期returnでスッキリ
def divide(a, b):
if b == 0:
return "ゼロ除算エラー" # 早期return
return a / b
print(divide(10, 2)) # → 5.0
print(divide(10, 0)) # → ゼロ除算エラー
まとめ:Python関数(def文)の要点整理
この記事で学んだPython関数の要点をまとめます。
| 概念 | 説明 |
|---|---|
def 文 | 関数を定義するキーワード |
| 引数 | 関数への入力データ。複数指定可 |
| キーワード引数 | 引数名を指定して渡す方法 |
| デフォルト値 | 省略可能な引数を作る仕組み |
return | 処理結果を呼び出し元に返す命令 |
| スコープ | 変数の有効範囲(ローカル/グローバル) |
*args | 任意の数の位置引数をタプルで受け取る |
**kwargs | 任意の数のキーワード引数を辞書で受け取る |
関数をうまく使えるようになると、コードの品質が一段階上がります。まずは小さな処理を関数にまとめる練習から始めてみましょう。*args や **kwargs の詳細は、それぞれの解説記事で掘り下げて学んでください!
📚 関連記事
- Python初心者のための戻り値(返り値)の基本— return文の詳細解説で補完
- 【Python初心者向け】インスタンスって何?クラス?オブジェクト指向の基礎となるインスタンス化をざっくり解説!— 関数の次のステップとしてのクラス学習
- Pythonのクラスメソッド・インスタンスメソッド・静的メソッドの違いと使い分け【実例4選】— 関数とメソッドの関連性を深掘り
- 【ざっくり解説】「関数」と「メソッド」の違いって?— 関数とメソッドの概念的な違いを明確化





