プログラムを書いていると、こんな困りごとがありませんか?
- 「同じ処理を何度も書いていて面倒…」
- 「コードが長くなって、どこに何が書いてあるかわからない」
- 「計算結果を他の場所でも使いたい」
そんなときに活躍するのが関数(function)です。
関数を使えば、よく使う処理をひとまとめにして、必要なときに簡単に呼び出すことができます。
この記事では、Python初心者の方にもわかりやすく、関数の基本概念から実践的な使い方まで、たくさんの例を使って詳しく解説します。
Pythonにおける関数とは?

関数の基本概念
関数とは簡単に言うと、「特定の処理をひとまとめにして、名前を付けたもの」です。
日常生活の例で考えてみましょう:
- 「朝食を作る」という作業を「朝食関数」とする
- 必要なときに「朝食関数を実行」すれば、毎回同じ手順で朝食ができる
- 材料(引数)を変えれば、違う朝食も作れる
プログラミングでも同じで、よく使う処理を関数にまとめることで、コードが整理され、再利用しやすくなります。
関数を使うメリット
メリット | 詳細説明 |
---|---|
再利用性 | 一度定義すれば何度でも使える |
読みやすさ | コードが整理されて理解しやすくなる |
保守性 | 修正するときは関数の中だけ直せばよい |
分業 | 複雑な処理を小さな部分に分けて考えられる |
実際の例で比較してみよう
関数を使わない場合:
print("=== 学生1の成績 ===")
print("数学: 85点")
print("英語: 92点")
print("平均:", (85 + 92) / 2)
print("=== 学生2の成績 ===")
print("数学: 78点")
print("英語: 88点")
print("平均:", (78 + 88) / 2)
関数を使った場合:
def show_grade(name, math, english):
print(f"=== {name}の成績 ===")
print(f"数学: {math}点")
print(f"英語: {english}点")
print("平均:", (math + english) / 2)
show_grade("学生1", 85, 92)
show_grade("学生2", 78, 88)
どちらも同じ結果になりますが、関数を使った方がコードがすっきりしていますね!
Python関数の基本構文
関数の定義方法
Pythonで関数を作るときは、以下の形式を使います:
def 関数名():
実行したい処理
重要なポイント:
def
キーワードで関数を定義する- 関数名の後に
()
を付ける - コロン
:
を忘れない - 実行したい処理はインデント(字下げ)する
最もシンプルな関数
def say_hello():
print("こんにちは!")
# 関数を呼び出す
say_hello()
実行結果:
こんにちは!
引数のある関数
関数に情報を渡したい場合は、引数を使います:
def greet(name):
print(f"こんにちは、{name}さん!")
greet("太郎")
greet("花子")
実行結果:
こんにちは、太郎さん!
こんにちは、花子さん!
- 引数は値を受け取る変数のようなもの
- 関数名の後の()内に引数名を指定
- 引数が複数ある場合はカンマ区切りで指定
- 関数を呼び出す時に引数の値を指定
複数の引数を持つ関数
def introduce(name, age, hobby):
print(f"私の名前は{name}です")
print(f"年齢は{age}歳です")
print(f"趣味は{hobby}です")
introduce("田中", 25, "読書")
実行結果:
私の名前は田中です
年齢は25歳です
趣味は読書です
def
を使って関数を定義し、関数名を書いて呼び出すと中の処理が実行されます。
戻り値(return)の使い方

returnとは?
関数の中で計算した結果を、関数の外で使いたい場合があります。
そんなときに使うのがreturn
文です。
def add(a, b):
result = a + b
return result
# 関数の結果を変数に保存
total = add(3, 5)
print(total) # 8
より実用的な例
def calculate_tax(price, tax_rate=0.1):
tax = price * tax_rate
total = price + tax
return total
# 商品価格1000円、消費税10%
final_price = calculate_tax(1000)
print(f"税込み価格: {final_price}円") # 税込み価格: 1100.0円
複数の値を返す
Pythonでは、複数の値をまとめて返すこともできます:
def analyze_score(score):
if score >= 90:
grade = "A"
comment = "優秀です!"
elif score >= 80:
grade = "B"
comment = "良好です"
elif score >= 70:
grade = "C"
comment = "普通です"
else:
grade = "D"
comment = "頑張りましょう"
return grade, comment
# 複数の値を受け取る
student_grade, feedback = analyze_score(85)
print(f"成績: {student_grade}") # 成績: B
print(f"コメント: {feedback}") # コメント: 良好です
returnがない関数
return
を書かない関数は、None
という特別な値を返します:
def show_message(message):
print(f"メッセージ: {message}")
# returnがない
result = show_message("こんにちは")
print(result) # None
関数はreturn
で値を返すことができ、計算結果を他の処理で活用できます。
関数の応用テクニック

デフォルト引数(省略可能な引数)
引数にあらかじめ値を設定しておくと、呼び出し時に省略できます:
def greet(name, greeting="こんにちは"):
print(f"{greeting}、{name}さん!")
greet("太郎") # こんにちは、太郎さん!
greet("花子", "おはよう") # おはよう、花子さん!
より実用的な例:
def create_user(name, age=18, city="東京"):
print(f"ユーザー作成:")
print(f"名前: {name}")
print(f"年齢: {age}")
print(f"都市: {city}")
create_user("田中")
# ユーザー作成:
# 名前: 田中
# 年齢: 18
# 都市: 東京
create_user("佐藤", 25, "大阪")
# ユーザー作成:
# 名前: 佐藤
# 年齢: 25
# 都市: 大阪
可変長引数(*args)
引数の数が決まっていない場合に使います:
def calculate_total(*numbers):
total = 0
for num in numbers:
total += num
return total
print(calculate_total(1, 2, 3)) # 6
print(calculate_total(10, 20, 30, 40)) # 100
より理解しやすい例:
def make_team(*players):
print("チームメンバー:")
for i, player in enumerate(players, 1):
print(f"{i}. {player}")
make_team("田中", "佐藤", "鈴木")
# チームメンバー:
# 1. 田中
# 2. 佐藤
# 3. 鈴木
キーワード引数(**kwargs)
キーと値のペアを任意の数だけ受け取れます:
def show_profile(**info):
print("プロフィール情報:")
for key, value in info.items():
print(f"{key}: {value}")
show_profile(name="太郎", age=25, city="東京", hobby="映画鑑賞")
# プロフィール情報:
# name: 太郎
# age: 25
# city: 東京
# hobby: 映画鑑賞
すべてを組み合わせた例
def flexible_function(required_arg, default_arg="デフォルト", *args, **kwargs):
print(f"必須引数: {required_arg}")
print(f"デフォルト引数: {default_arg}")
if args:
print(f"追加の引数: {args}")
if kwargs:
print("キーワード引数:")
for key, value in kwargs.items():
print(f" {key}: {value}")
flexible_function("必須", "カスタム", 1, 2, 3, name="太郎", age=25)
引数のバリエーションを使いこなすと、柔軟で再利用性の高い関数が作れます。
実践的な関数の例

例1:パスワード強度チェック関数
def check_password_strength(password):
issues = []
if len(password) < 8:
issues.append("8文字以上にしてください")
if not any(c.isupper() for c in password):
issues.append("大文字を含めてください")
if not any(c.islower() for c in password):
issues.append("小文字を含めてください")
if not any(c.isdigit() for c in password):
issues.append("数字を含めてください")
if len(issues) == 0:
return True, "強いパスワードです!"
else:
return False, issues
# 使用例
is_strong, message = check_password_strength("Pass123")
print(f"強度チェック結果: {message}")
例2:BMI計算と判定関数
def calculate_bmi(weight, height):
bmi = weight / (height ** 2)
if bmi < 18.5:
status = "やせ型"
elif bmi < 25:
status = "標準"
elif bmi < 30:
status = "軽度肥満"
else:
status = "肥満"
return round(bmi, 1), status
# 使用例
bmi_value, health_status = calculate_bmi(65, 1.70)
print(f"BMI: {bmi_value}")
print(f"判定: {health_status}")
例3:リストの統計情報を取得する関数
def get_statistics(numbers):
if not numbers:
return "リストが空です"
total = sum(numbers)
count = len(numbers)
average = total / count
maximum = max(numbers)
minimum = min(numbers)
return {
"合計": total,
"個数": count,
"平均": round(average, 2),
"最大値": maximum,
"最小値": minimum
}
# 使用例
scores = [85, 92, 78, 96, 88]
stats = get_statistics(scores)
for key, value in stats.items():
print(f"{key}: {value}")
関数でよくあるエラーと対策

エラー1:TypeError – 引数の数が合わない
間違った例:
def greet(name, age):
print(f"こんにちは、{name}さん({age}歳)")
greet("太郎") # ageが足りない!
エラーメッセージ:
TypeError: greet() missing 1 required positional argument: 'age'
正しい書き方:
def greet(name, age=0): # デフォルト値を設定
print(f"こんにちは、{name}さん({age}歳)")
greet("太郎") # OK
エラー2:NameError – 関数が定義されていない
間違った例:
say_hello() # 関数を定義する前に呼び出している
def say_hello():
print("こんにちは")
正しい書き方:
def say_hello():
print("こんにちは")
say_hello() # 定義の後に呼び出す
エラー3:IndentationError – インデントのミス
間違った例:
def calculate(x, y):
print(x + y) # インデントがない!
正しい書き方:
def calculate(x, y):
print(x + y) # 半角スペース4つでインデント
エラー4:returnを忘れる
問題のある例:
def add(a, b):
result = a + b
# returnを忘れている
total = add(3, 5)
print(total) # None が表示される
正しい書き方:
def add(a, b):
result = a + b
return result # 結果を返す
total = add(3, 5)
print(total) # 8 が表示される
デバッグのコツ
関数で問題が起きたときは、以下をチェックしてください:
- 関数の定義と呼び出しの引数の数は一致しているか
- 関数を定義してから呼び出しているか
- インデントは正しいか(半角スペース4つ)
- 戻り値が必要な場合、returnを書いているか
- 関数名のスペルは正しいか
関数のエラーは「引数の数」「定義の順序」「インデント」「return」を重点的にチェックしましょう。
関数設計のTips

良い関数の特徴
- 単一責任の原則: 1つの関数は1つのことだけを行う
- わかりやすい名前: 何をする関数か一目でわかる
- 適切な長さ: 長すぎず、短すぎない(一般的に20行以内)
- 適切なコメント: 複雑な処理には説明を付ける
良い例と悪い例
悪い例:
def process_data(data):
# 何をする関数かわからない
result = []
for item in data:
if item > 0:
result.append(item * 2)
else:
result.append(0)
return result
良い例:
def double_positive_numbers(numbers):
#リストの正の数を2倍にし、負の数は0に変換する
processed_numbers = []
for num in numbers:
if num > 0:
processed_numbers.append(num * 2)
else:
processed_numbers.append(0)
return processed_numbers
関数名の付け方
- 動詞で始める:
calculate_tax
,check_password
,get_user_info
- 具体的にする:
process
よりvalidate_email
- 一貫性を保つ: 同じ種類の処理は同じ命名パターンを使う
まとめ
Pythonの関数は、繰り返し処理をまとめ、コードを整理し、再利用性を高めるために欠かせない機能です。
基本構文:
def
で関数を定義し、()
で呼び出す- 引数で情報を渡し、
return
で結果を返す
エラー対策:
- 引数の数、インデント、returnの有無をチェック
- わかりやすい関数名と適切なコメントを心がける
コメント