関数の基本 - 処理をまとめて再利用
目次
1. このレッスンで学ぶこと
- 関数とは何か
- 関数の定義方法
- 関数の呼び出し方
- 関数を使うメリット
2. 関数とは
関数は、特定の処理をまとめて名前を付け、何度でも呼び出せるようにしたプログラムの部品です。
関数の構成要素
| 要素 | 説明 | 例 |
|---|---|---|
| 関数名 | 処理の名前 | , \ |
| 引数 | 関数に渡す値(省略可) | , \ |
| 処理内容 | 実行する命令 | , 計算など |
| 戻り値 | 関数が返す結果(省略可) | 計算結果、処理後のデータ |
関数の主な特徴
- コードをまとめて再利用できる
- 処理に名前を付けて分かりやすくする
- 一度定義すれば何度でも呼び出せる
- 引数を使って柔軟に動作を変えられる
最もシンプルな例
Python# 関数の定義 def say_hello(): print("こんにちは!") # 関数の呼び出し say_hello() # こんにちは! say_hello() # こんにちは!
実行結果:
こんにちは!
こんにちは!
3. なぜ関数が必要か?
同じ処理を何度も書くのは非効率です。
関数を使うことで、コードを再利用できます。
💡 豆知識: 関数は「処理のブラックボックス」とも呼ばれます。内部の実装を知らなくても、入力(引数)と出力(戻り値)の関係さえ分かれば使えます。これは実際の製品を使うのと似ています。スマートフォンの内部回路を知らなくても使えるのと同じです。
4. 関数の定義
defキーワード
Python# 関数の定義 def show_message(): print("メッセージを表示します") print("これは関数内の処理です") # 関数の呼び出し print("=== 1回目 ===") show_message() print("\n=== 2回目 ===") show_message()
実行結果:
=== 1回目 ===
メッセージを表示します
これは関数内の処理です
=== 2回目 ===
メッセージを表示します
これは関数内の処理です
関数名の付け方
機能: 関数には分かりやすい名前を付けます。
書き方:
Pythondef 動詞_名詞(): # 推奨される命名規則 処理
用途: コードの可読性向上
注意点: スネークケース(小文字とアンダースコア)を使う
Python# 良い関数名の例 def calculate_total(): total = 100 + 200 print(f"合計: {total}") def show_user_info(): print("ユーザー情報を表示") def check_password(): print("パスワードをチェック") # 呼び出し calculate_total() show_user_info() check_password()
実行結果:
合計: 300
ユーザー情報を表示
パスワードをチェック
5. 関数の呼び出し
基本的な呼び出し
Pythondef print_line(): print("=" * 30) def show_title(): print("【タイトル】") # 関数を組み合わせて使う print_line() show_title() print_line() print("\n本文をここに書きます\n") print_line() print("終わり") print_line()
実行結果:
==============================
【タイトル】
==============================
本文をここに書きます
==============================
終わり
==============================
関数内から関数を呼び出す
Pythondef print_header(): print("=" * 40) print("システムメッセージ") print("=" * 40) def print_footer(): print("=" * 40) def show_notification(message): print_header() print(f"\n{message}\n") print_footer() # 使用例 show_notification("処理が完了しました") print() show_notification("エラーが発生しました")
実行結果:
========================================
システムメッセージ
========================================
処理が完了しました
========================================
========================================
システムメッセージ
========================================
エラーが発生しました
========================================
6. 関数を使うメリット
メリット1: コードの再利用
Python# 同じ処理を関数にまとめる def draw_box(text): length = len(text) + 4 print("+" + "-" * length + "+") print(f"| {text} |") print("+" + "-" * length + "+") # 何度でも使える draw_box("ようこそ") print() draw_box("Python学習") print() draw_box("関数は便利")
実行結果:
+------------+
| ようこそ |
+------------+
+----------------+
| Python学習 |
+----------------+
+----------------+
| 関数は便利 |
+----------------+
メリット2: 可読性の向上
Python# 関数を使わない場合(読みにくい) print("処理開始") total = 0 for i in range(1, 11): total += i print(f"1から10の合計: {total}") print("処理終了") print() # 関数を使う場合(読みやすい) def calculate_sum(): total = 0 for i in range(1, 11): total += i return total def main(): print("処理開始") result = calculate_sum() print(f"1から10の合計: {result}") print("処理終了") main()
実行結果:
処理開始
1から10の合計: 55
処理終了
処理開始
1から10の合計: 55
処理終了
メリット3: 保守性の向上
Python# 挨拶メッセージを関数化 def greet_user(name): print(f"ようこそ、{name}さん!") print("今日も良い一日を!") # メインプログラム users = ["太郎", "花子", "次郎"] print("=== ユーザーに挨拶 ===") for user in users: greet_user(user) print() # 挨拶の内容を変更したい場合、関数を1箇所修正するだけでOK
実行結果:
=== ユーザーに挨拶 ===
ようこそ、太郎さん!
今日も良い一日を!
ようこそ、花子さん!
今日も良い一日を!
ようこそ、次郎さん!
今日も良い一日を!
7. 引数のある関数
引数の基本
機能: 関数に値を渡して処理します。
書き方:
Pythondef 関数名(引数1, 引数2): 処理
用途: 関数の動作を柔軟に変更
注意点: 引数の数と順序を合わせる
Python# 引数を1つ受け取る def greet(name): print(f"こんにちは、{name}さん!") greet("太郎") greet("花子") # 引数を2つ受け取る def introduce(name, age): print(f"私は{name}です。{age}歳です。") introduce("太郎", 25) introduce("花子", 30) # 引数を3つ受け取る def show_product(name, price, stock): print(f"商品: {name}") print(f" 価格: {price:,}円") print(f" 在庫: {stock}個") show_product("ノートPC", 98000, 5) print() show_product("マウス", 1500, 20)
実行結果:
こんにちは、太郎さん!
こんにちは、花子さん!
私は太郎です。25歳です。
私は花子です。30歳です。
商品: ノートPC
価格: 98,000円
在庫: 5個
商品: マウス
価格: 1,500円
在庫: 20個
8. 戻り値のある関数
returnキーワード
機能: 関数の処理結果を呼び出し元に返します。
書き方:
Pythondef 関数名(引数): 処理 return 結果
用途: 計算結果の取得、処理結果の判定
注意点: returnで関数が終了する
Python# 計算結果を返す def add(a, b): result = a + b return result # 戻り値を受け取る total = add(10, 20) print(f"10 + 20 = {total}") # 直接使うこともできる print(f"5 + 7 = {add(5, 7)}") # 複数の計算 def calculate_area(width, height): area = width * height return area rect_area = calculate_area(5, 3) print(f"\n長方形の面積: {rect_area}") # 三角形の面積 def triangle_area(base, height): return base * height / 2 tri_area = triangle_area(6, 4) print(f"三角形の面積: {tri_area}")
実行結果:
10 + 20 = 30
5 + 7 = 12
長方形の面積: 15
三角形の面積: 12.0
9. 具体例
例1: 温度変換関数
Python# 摂氏を華氏に変換 def celsius_to_fahrenheit(celsius): fahrenheit = celsius * 9/5 + 32 return fahrenheit # 華氏を摂氏に変換 def fahrenheit_to_celsius(fahrenheit): celsius = (fahrenheit - 32) * 5/9 return celsius # 使用例 print("=== 温度変換 ===") temp_c = 25 temp_f = celsius_to_fahrenheit(temp_c) print(f"{temp_c}°C = {temp_f}°F") temp_f2 = 77 temp_c2 = fahrenheit_to_celsius(temp_f2) print(f"{temp_f2}°F = {temp_c2:.1f}°C")
実行結果:
=== 温度変換 ===
25°C = 77.0°F
77°F = 25.0°C
例2: 消費税計算
Pythondef calculate_tax(price, tax_rate=0.1): tax = int(price * tax_rate) return tax def calculate_total(price, tax_rate=0.1): tax = calculate_tax(price, tax_rate) total = price + tax return total # 使用例 products = [ ("りんご", 100), ("バナナ", 150), ("オレンジ", 200) ] print("=== 買い物リスト ===") grand_total = 0 for name, price in products: tax = calculate_tax(price) total = calculate_total(price) grand_total += total print(f"{name}: {price}円 (税{tax}円) = {total}円") print(f"\n合計: {grand_total}円")
実行結果:
=== 買い物リスト ===
りんご: 100円 (税10円) = 110円
バナナ: 150円 (税15円) = 165円
オレンジ: 200円 (税20円) = 220円
合計: 495円
例3: 文字列処理関数
Pythondef repeat_text(text, count): return text * count def make_frame(text): length = len(text) line = "=" * (length + 4) return f"{line}\n| {text} |\n{line}" def reverse_text(text): return text[::-1] # 使用例 print(repeat_text("Hello ", 3)) print() message = "重要なお知らせ" print(make_frame(message)) print() word = "Python" reversed_word = reverse_text(word) print(f"{word} を逆から読むと {reversed_word}")
実行結果:
Hello Hello Hello
======================
| 重要なお知らせ |
======================
Python を逆から読むと nohtyP
10. 練習問題
問題1(基礎)⭐☆☆
2つの数値を受け取って、その合計を返す関数add_numbersを作成してください。
Python# ここに関数を定義してください # テスト result = add_numbers(10, 20) print(f"10 + 20 = {result}")
💡 ヒント
- 関数は
defキーワードで定義 - 引数を2つ受け取る
returnで計算結果を返す
✅ 解答例
Pythondef add_numbers(a, b): total = a + b return total # テスト result = add_numbers(10, 20) print(f"10 + 20 = {result}") result2 = add_numbers(5, 7) print(f"5 + 7 = {result2}")
実行結果:
10 + 20 = 30
5 + 7 = 12
解説:
関数はdefキーワードで定義し、引数aとbを受け取ります。計算結果をreturnで返すことで、呼び出し元で結果を使用できます。
問題2(基礎)⭐☆☆
名前を受け取って「こんにちは、〇〇さん!」と表示する関数greetを作成してください。
Python# ここに関数を定義してください # テスト greet("太郎") greet("花子")
💡 ヒント
- 引数で名前を受け取る
- f文字列を使って挨拶メッセージを作成
print()で表示
✅ 解答例
Pythondef greet(name): print(f"こんにちは、{name}さん!") # テスト greet("太郎") greet("花子") greet("次郎")
実行結果:
こんにちは、太郎さん!
こんにちは、花子さん!
こんにちは、次郎さん!
解説:
引数nameを受け取り、f文字列で挨拶メッセージを作成して表示します。戻り値がない場合はreturnを省略できます。
問題3(応用)⭐⭐☆
商品の価格と個数を受け取って、消費税込みの合計金額を計算する関数calculate_total_with_taxを作成してください。消費税率は10%とします。
Python# ここに関数を定義してください # テスト total = calculate_total_with_tax(100, 3) print(f"税込合計: {total}円")
💡 ヒント
- 価格 × 個数 で小計を計算
- 小計 × 1.1 で税込金額を計算
int()で整数に変換して返す
✅ 解答例
Pythondef calculate_total_with_tax(price, quantity): # 小計を計算 subtotal = price * quantity # 消費税込みの金額を計算(10%) total = int(subtotal * 1.1) return total # テスト total1 = calculate_total_with_tax(100, 3) print(f"100円 × 3個 = 税込{total1}円") total2 = calculate_total_with_tax(250, 2) print(f"250円 × 2個 = 税込{total2}円") total3 = calculate_total_with_tax(1500, 1) print(f"1500円 × 1個 = 税込{total3}円")
実行結果:
100円 × 3個 = 税込330円
250円 × 2個 = 税込550円
1500円 × 1個 = 税込1650円
解説:
複数の計算を組み合わせた関数です。まず小計を計算し、それに1.1を掛けて消費税込みの金額を求めます。int()で整数に変換することで、小数点以下を切り捨てます。
11. まとめ
このレッスンでは、関数の基本概念と定義方法を学びました。
- 関数は処理をまとめて再利用するための基本構文です。
defによる定義と呼び出しの流れを理解しました。- 同じ処理の重複を減らし、可読性を高める効果を確認しました。
- 関数名と処理責務を明確にする設計の重要性を学びました。
- 小さな関数へ分割することで保守しやすいコードになります。
関数の基本 - 処理をまとめて再利用
目次
1. このレッスンで学ぶこと
- 関数とは何か
- 関数の定義方法
- 関数の呼び出し方
- 関数を使うメリット
2. 関数とは
関数は、特定の処理をまとめて名前を付け、何度でも呼び出せるようにしたプログラムの部品です。
関数の構成要素
| 要素 | 説明 | 例 |
|---|---|---|
| 関数名 | 処理の名前 | , \ |
| 引数 | 関数に渡す値(省略可) | , \ |
| 処理内容 | 実行する命令 | , 計算など |
| 戻り値 | 関数が返す結果(省略可) | 計算結果、処理後のデータ |
関数の主な特徴
- コードをまとめて再利用できる
- 処理に名前を付けて分かりやすくする
- 一度定義すれば何度でも呼び出せる
- 引数を使って柔軟に動作を変えられる
最もシンプルな例
Python# 関数の定義 def say_hello(): print("こんにちは!") # 関数の呼び出し say_hello() # こんにちは! say_hello() # こんにちは!
実行結果:
こんにちは!
こんにちは!
3. なぜ関数が必要か?
同じ処理を何度も書くのは非効率です。
関数を使うことで、コードを再利用できます。
💡 豆知識: 関数は「処理のブラックボックス」とも呼ばれます。内部の実装を知らなくても、入力(引数)と出力(戻り値)の関係さえ分かれば使えます。これは実際の製品を使うのと似ています。スマートフォンの内部回路を知らなくても使えるのと同じです。
4. 関数の定義
defキーワード
Python# 関数の定義 def show_message(): print("メッセージを表示します") print("これは関数内の処理です") # 関数の呼び出し print("=== 1回目 ===") show_message() print("\n=== 2回目 ===") show_message()
実行結果:
=== 1回目 ===
メッセージを表示します
これは関数内の処理です
=== 2回目 ===
メッセージを表示します
これは関数内の処理です
関数名の付け方
機能: 関数には分かりやすい名前を付けます。
書き方:
Pythondef 動詞_名詞(): # 推奨される命名規則 処理
用途: コードの可読性向上
注意点: スネークケース(小文字とアンダースコア)を使う
Python# 良い関数名の例 def calculate_total(): total = 100 + 200 print(f"合計: {total}") def show_user_info(): print("ユーザー情報を表示") def check_password(): print("パスワードをチェック") # 呼び出し calculate_total() show_user_info() check_password()
実行結果:
合計: 300
ユーザー情報を表示
パスワードをチェック
5. 関数の呼び出し
基本的な呼び出し
Pythondef print_line(): print("=" * 30) def show_title(): print("【タイトル】") # 関数を組み合わせて使う print_line() show_title() print_line() print("\n本文をここに書きます\n") print_line() print("終わり") print_line()
実行結果:
==============================
【タイトル】
==============================
本文をここに書きます
==============================
終わり
==============================
関数内から関数を呼び出す
Pythondef print_header(): print("=" * 40) print("システムメッセージ") print("=" * 40) def print_footer(): print("=" * 40) def show_notification(message): print_header() print(f"\n{message}\n") print_footer() # 使用例 show_notification("処理が完了しました") print() show_notification("エラーが発生しました")
実行結果:
========================================
システムメッセージ
========================================
処理が完了しました
========================================
========================================
システムメッセージ
========================================
エラーが発生しました
========================================
6. 関数を使うメリット
メリット1: コードの再利用
Python# 同じ処理を関数にまとめる def draw_box(text): length = len(text) + 4 print("+" + "-" * length + "+") print(f"| {text} |") print("+" + "-" * length + "+") # 何度でも使える draw_box("ようこそ") print() draw_box("Python学習") print() draw_box("関数は便利")
実行結果:
+------------+
| ようこそ |
+------------+
+----------------+
| Python学習 |
+----------------+
+----------------+
| 関数は便利 |
+----------------+
メリット2: 可読性の向上
Python# 関数を使わない場合(読みにくい) print("処理開始") total = 0 for i in range(1, 11): total += i print(f"1から10の合計: {total}") print("処理終了") print() # 関数を使う場合(読みやすい) def calculate_sum(): total = 0 for i in range(1, 11): total += i return total def main(): print("処理開始") result = calculate_sum() print(f"1から10の合計: {result}") print("処理終了") main()
実行結果:
処理開始
1から10の合計: 55
処理終了
処理開始
1から10の合計: 55
処理終了
メリット3: 保守性の向上
Python# 挨拶メッセージを関数化 def greet_user(name): print(f"ようこそ、{name}さん!") print("今日も良い一日を!") # メインプログラム users = ["太郎", "花子", "次郎"] print("=== ユーザーに挨拶 ===") for user in users: greet_user(user) print() # 挨拶の内容を変更したい場合、関数を1箇所修正するだけでOK
実行結果:
=== ユーザーに挨拶 ===
ようこそ、太郎さん!
今日も良い一日を!
ようこそ、花子さん!
今日も良い一日を!
ようこそ、次郎さん!
今日も良い一日を!
7. 引数のある関数
引数の基本
機能: 関数に値を渡して処理します。
書き方:
Pythondef 関数名(引数1, 引数2): 処理
用途: 関数の動作を柔軟に変更
注意点: 引数の数と順序を合わせる
Python# 引数を1つ受け取る def greet(name): print(f"こんにちは、{name}さん!") greet("太郎") greet("花子") # 引数を2つ受け取る def introduce(name, age): print(f"私は{name}です。{age}歳です。") introduce("太郎", 25) introduce("花子", 30) # 引数を3つ受け取る def show_product(name, price, stock): print(f"商品: {name}") print(f" 価格: {price:,}円") print(f" 在庫: {stock}個") show_product("ノートPC", 98000, 5) print() show_product("マウス", 1500, 20)
実行結果:
こんにちは、太郎さん!
こんにちは、花子さん!
私は太郎です。25歳です。
私は花子です。30歳です。
商品: ノートPC
価格: 98,000円
在庫: 5個
商品: マウス
価格: 1,500円
在庫: 20個
8. 戻り値のある関数
returnキーワード
機能: 関数の処理結果を呼び出し元に返します。
書き方:
Pythondef 関数名(引数): 処理 return 結果
用途: 計算結果の取得、処理結果の判定
注意点: returnで関数が終了する
Python# 計算結果を返す def add(a, b): result = a + b return result # 戻り値を受け取る total = add(10, 20) print(f"10 + 20 = {total}") # 直接使うこともできる print(f"5 + 7 = {add(5, 7)}") # 複数の計算 def calculate_area(width, height): area = width * height return area rect_area = calculate_area(5, 3) print(f"\n長方形の面積: {rect_area}") # 三角形の面積 def triangle_area(base, height): return base * height / 2 tri_area = triangle_area(6, 4) print(f"三角形の面積: {tri_area}")
実行結果:
10 + 20 = 30
5 + 7 = 12
長方形の面積: 15
三角形の面積: 12.0
9. 具体例
例1: 温度変換関数
Python# 摂氏を華氏に変換 def celsius_to_fahrenheit(celsius): fahrenheit = celsius * 9/5 + 32 return fahrenheit # 華氏を摂氏に変換 def fahrenheit_to_celsius(fahrenheit): celsius = (fahrenheit - 32) * 5/9 return celsius # 使用例 print("=== 温度変換 ===") temp_c = 25 temp_f = celsius_to_fahrenheit(temp_c) print(f"{temp_c}°C = {temp_f}°F") temp_f2 = 77 temp_c2 = fahrenheit_to_celsius(temp_f2) print(f"{temp_f2}°F = {temp_c2:.1f}°C")
実行結果:
=== 温度変換 ===
25°C = 77.0°F
77°F = 25.0°C
例2: 消費税計算
Pythondef calculate_tax(price, tax_rate=0.1): tax = int(price * tax_rate) return tax def calculate_total(price, tax_rate=0.1): tax = calculate_tax(price, tax_rate) total = price + tax return total # 使用例 products = [ ("りんご", 100), ("バナナ", 150), ("オレンジ", 200) ] print("=== 買い物リスト ===") grand_total = 0 for name, price in products: tax = calculate_tax(price) total = calculate_total(price) grand_total += total print(f"{name}: {price}円 (税{tax}円) = {total}円") print(f"\n合計: {grand_total}円")
実行結果:
=== 買い物リスト ===
りんご: 100円 (税10円) = 110円
バナナ: 150円 (税15円) = 165円
オレンジ: 200円 (税20円) = 220円
合計: 495円
例3: 文字列処理関数
Pythondef repeat_text(text, count): return text * count def make_frame(text): length = len(text) line = "=" * (length + 4) return f"{line}\n| {text} |\n{line}" def reverse_text(text): return text[::-1] # 使用例 print(repeat_text("Hello ", 3)) print() message = "重要なお知らせ" print(make_frame(message)) print() word = "Python" reversed_word = reverse_text(word) print(f"{word} を逆から読むと {reversed_word}")
実行結果:
Hello Hello Hello
======================
| 重要なお知らせ |
======================
Python を逆から読むと nohtyP
10. 練習問題
問題1(基礎)⭐☆☆
2つの数値を受け取って、その合計を返す関数add_numbersを作成してください。
Python# ここに関数を定義してください # テスト result = add_numbers(10, 20) print(f"10 + 20 = {result}")
💡 ヒント
- 関数は
defキーワードで定義 - 引数を2つ受け取る
returnで計算結果を返す
✅ 解答例
Pythondef add_numbers(a, b): total = a + b return total # テスト result = add_numbers(10, 20) print(f"10 + 20 = {result}") result2 = add_numbers(5, 7) print(f"5 + 7 = {result2}")
実行結果:
10 + 20 = 30
5 + 7 = 12
解説:
関数はdefキーワードで定義し、引数aとbを受け取ります。計算結果をreturnで返すことで、呼び出し元で結果を使用できます。
問題2(基礎)⭐☆☆
名前を受け取って「こんにちは、〇〇さん!」と表示する関数greetを作成してください。
Python# ここに関数を定義してください # テスト greet("太郎") greet("花子")
💡 ヒント
- 引数で名前を受け取る
- f文字列を使って挨拶メッセージを作成
print()で表示
✅ 解答例
Pythondef greet(name): print(f"こんにちは、{name}さん!") # テスト greet("太郎") greet("花子") greet("次郎")
実行結果:
こんにちは、太郎さん!
こんにちは、花子さん!
こんにちは、次郎さん!
解説:
引数nameを受け取り、f文字列で挨拶メッセージを作成して表示します。戻り値がない場合はreturnを省略できます。
問題3(応用)⭐⭐☆
商品の価格と個数を受け取って、消費税込みの合計金額を計算する関数calculate_total_with_taxを作成してください。消費税率は10%とします。
Python# ここに関数を定義してください # テスト total = calculate_total_with_tax(100, 3) print(f"税込合計: {total}円")
💡 ヒント
- 価格 × 個数 で小計を計算
- 小計 × 1.1 で税込金額を計算
int()で整数に変換して返す
✅ 解答例
Pythondef calculate_total_with_tax(price, quantity): # 小計を計算 subtotal = price * quantity # 消費税込みの金額を計算(10%) total = int(subtotal * 1.1) return total # テスト total1 = calculate_total_with_tax(100, 3) print(f"100円 × 3個 = 税込{total1}円") total2 = calculate_total_with_tax(250, 2) print(f"250円 × 2個 = 税込{total2}円") total3 = calculate_total_with_tax(1500, 1) print(f"1500円 × 1個 = 税込{total3}円")
実行結果:
100円 × 3個 = 税込330円
250円 × 2個 = 税込550円
1500円 × 1個 = 税込1650円
解説:
複数の計算を組み合わせた関数です。まず小計を計算し、それに1.1を掛けて消費税込みの金額を求めます。int()で整数に変換することで、小数点以下を切り捨てます。
11. まとめ
このレッスンでは、関数の基本概念と定義方法を学びました。
- 関数は処理をまとめて再利用するための基本構文です。
defによる定義と呼び出しの流れを理解しました。- 同じ処理の重複を減らし、可読性を高める効果を確認しました。
- 関数名と処理責務を明確にする設計の重要性を学びました。
- 小さな関数へ分割することで保守しやすいコードになります。