メインコンテンツへスキップ
Lesson1 / 8

関数の基本 - 処理をまとめて再利用

目次

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回目 ===
メッセージを表示します
これは関数内の処理です

関数名の付け方

機能: 関数には分かりやすい名前を付けます。

書き方:

Python
def 動詞_名詞():  # 推奨される命名規則
    処理

用途: コードの可読性向上

注意点: スネークケース(小文字とアンダースコア)を使う

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. 関数の呼び出し

基本的な呼び出し

Python
def print_line():
    print("=" * 30)

def show_title():
    print("【タイトル】")

# 関数を組み合わせて使う
print_line()
show_title()
print_line()

print("\n本文をここに書きます\n")

print_line()
print("終わり")
print_line()

実行結果:

==============================
【タイトル】
==============================

本文をここに書きます

==============================
終わり
==============================

関数内から関数を呼び出す

Python
def 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. 引数のある関数

引数の基本

機能: 関数に値を渡して処理します。

書き方:

Python
def 関数名(引数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キーワード

機能: 関数の処理結果を呼び出し元に返します。

書き方:

Python
def 関数名(引数):
    処理
    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: 消費税計算

Python
def 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: 文字列処理関数

Python
def 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で計算結果を返す
✅ 解答例
Python
def 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キーワードで定義し、引数abを受け取ります。計算結果をreturnで返すことで、呼び出し元で結果を使用できます。


問題2(基礎)⭐☆☆

名前を受け取って「こんにちは、〇〇さん!」と表示する関数greetを作成してください。

Python
# ここに関数を定義してください

# テスト
greet("太郎")
greet("花子")
💡 ヒント
  • 引数で名前を受け取る
  • f文字列を使って挨拶メッセージを作成
  • print()で表示
✅ 解答例
Python
def 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. 価格 × 個数 で小計を計算
  2. 小計 × 1.1 で税込金額を計算
  3. int()で整数に変換して返す
✅ 解答例
Python
def 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 による定義と呼び出しの流れを理解しました。
  • 同じ処理の重複を減らし、可読性を高める効果を確認しました。
  • 関数名と処理責務を明確にする設計の重要性を学びました。
  • 小さな関数へ分割することで保守しやすいコードになります。