📋 このステップで学ぶこと
関数の定義(def)
引数と戻り値
デフォルト引数
関数を使った計算例
学習時間の目安: 2.5〜3時間
🎯 1. 関数とは?
処理をまとめて名前をつける
これまで、同じような処理を何度も書いてきました。でも、それは効率的ではありません。
❌ 同じコードを何度も書く問題
例えば、BMIを3人分計算する場合、同じ計算式を3回も書かなければなりません:
コードが長くなる
計算式を変更したくなったら、全部書き換える必要がある
ミスが起きやすい
関数(かんすう) とは、よく使う処理をまとめて名前をつけたもの です。料理のレシピのように、一度定義すれば何度でも使えます。
🍳 関数は「料理のレシピ」
料理を作る流れ:
材料を渡す → 引数(ひきすう)
レシピに従って料理する → 関数の処理
完成品を返す → 戻り値(もどりち)
例:オムレツを作る関数
材料(引数): 卵、塩、バター
レシピ(処理): 卵を溶く、焼く、形を整える
完成品(戻り値): オムレツ
今まで使ってきた関数
実は、すでにたくさんの関数を使っています。これらは組み込み関数 といって、Pythonが最初から用意してくれている関数です:
print() – 画面に表示する関数(引数:表示したい値、戻り値:なし)
len() – 長さを返す関数(引数:リストや文字列、戻り値:長さの数値)
type() – データ型を返す関数(引数:調べたい値、戻り値:データ型)
range() – 数値の範囲を作る関数(引数:開始・終了・ステップ、戻り値:数値の範囲)
今回は、自分で関数を作る方法 を学びます!
📌 関数を使うメリット
コードの再利用 – 一度書けば何度でも使える
読みやすくなる – 処理に名前がつくので意図がわかりやすい
保守しやすい – 修正が1箇所で済む
テストしやすい – 機能ごとに動作確認できる
📝 2. 関数の定義(def文)
関数を作ることを「定義する」という
関数を作ることを「関数を定義する」といいます。def (define = 定義する)という言葉を使います。
📌 関数の基本構文
※ 画面が小さい場合は、コードブロックを横にスクロールできます
📌 関数定義の5つのルール
1. def の後に関数名を書く
2. カッコ() をつける – 引数を書く場所(今は空でOK)
3. コロン(:) を行末につける – 必須!忘れるとエラー
4. インデント(字下げ) する – スペース4つ(Tabキーで自動入力)
5. 小文字とアンダースコア で書く – Pythonの慣習
最初の関数を作ってみよう
では、実際に関数を作ってみましょう。挨拶をする簡単な関数から始めます。
# 関数の定義
def say_hello():
print(“こんにちは!”)
print(“Pythonの世界へようこそ”)
# 関数を呼び出す(実行する)
say_hello()
こんにちは!
Pythonの世界へようこそ
💡 コードの詳しい説明
def say_hello():
def – 「関数を定義する」という命令
say_hello – 関数名(自由に決められます)
() – 引数を書く場所(今回は空)
: – コロン(必須!忘れるとSyntaxError)
print(“こんにちは!”)
関数の中身(処理)
スペース4つでインデントされている
複数行の処理を書ける
say_hello()
関数を呼び出す(実行する)命令
関数名の後に()をつける
この行が実行されると、関数の中身が実行される
🔑 重要:定義と呼び出しは別々
def say_hello(): – 関数を作る だけ
say_hello() – 関数を実行する
定義しただけでは実行されません
呼び出すことで初めて実行されます
関数は何度でも呼び出せる
一度定義した関数は、何度でも使えます。これが関数の大きなメリットです!
# 関数の定義
def greet():
print(“おはようございます!”)
# 何度でも呼び出せる
greet()
greet()
greet()
おはようございます!
おはようございます!
おはようございます!
💡 再利用のメリット
同じ処理を1回だけ書けばいい
必要な時に何度でも呼び出せる
処理を変更したくなっても、関数の定義部分を1箇所変えるだけでOK
100回呼び出しても、定義は1回だけ
📥 3. 引数(パラメータ)
関数に「材料」を渡す
今までの関数は、いつも同じ動作をしました。でも、引数(ひきすう) を使うと、関数に値を渡して、動作を変えることができます。
📌 引数の役割
引数 とは、関数に渡す「材料」のようなものです。
料理に例えると:
オムレツを作る関数に「卵2個」を渡す → 2個分のオムレツができる
オムレツを作る関数に「卵3個」を渡す → 3個分のオムレツができる
プログラムでは:
挨拶する関数に「太郎」を渡す → 「こんにちは、太郎さん!」
挨拶する関数に「花子」を渡す → 「こんにちは、花子さん!」
引数を受け取る関数
()の中に変数名を書くことで、関数は値を受け取ることができます。
# 引数を受け取る関数
def greet(name):
print(f”こんにちは、{name}さん!”)
# 関数を呼び出すときに値を渡す
greet(“太郎”)
greet(“花子”)
greet(“次郎”)
こんにちは、太郎さん!
こんにちは、花子さん!
こんにちは、次郎さん!
💡 コードの詳しい説明
def greet(name):
()の中にnameと書く
これが引数の名前(変数名)
関数の中でnameという変数が使える
print(f”こんにちは、{name}さん!”)
{name}の部分に、渡された値が入る
f-string(フォーマット文字列)を使用
greet(“太郎”)
"太郎"を引数として渡している
nameには"太郎"が入る
動作の流れ:
greet("太郎")を実行
nameに"太郎"が代入される
print(f"こんにちは、太郎さん!")が実行される
複数の引数を受け取る
引数は複数個受け取ることもできます。カンマ(,)で区切って書きます。
# 2つの引数を受け取る
def add(a, b):
result = a + b
print(f”{a} + {b} = {result}”)
add(5, 3)
add(10, 20)
add(100, 200)
5 + 3 = 8
10 + 20 = 30
100 + 200 = 300
💡 複数の引数の説明
def add(a, b):
aとbという2つの引数を受け取る
カンマで区切って書く
引数は3個、4個…といくつでも書ける
add(5, 3)
最初の値(5)がaに入る
2番目の値(3)がbに入る
順番が重要! add(3, 5)ならa=3, b=5になる
実践例:BMI計算関数
実際に使える関数を作ってみましょう。BMI(体格指数)を計算する関数です。
# BMIを計算して表示する関数
def calculate_bmi(height_cm, weight_kg):
# 身長をメートルに変換
height_m = height_cm / 100
# BMIを計算
bmi = weight_kg / (height_m ** 2)
# 結果を表示
print(f”身長:{height_cm}cm”)
print(f”体重:{weight_kg}kg”)
print(f”BMI:{bmi:.1f}”)
# 関数を呼び出す
calculate_bmi(170, 65)
print(“—“)
calculate_bmi(160, 55)
身長:170cm
体重:65kg
BMI:22.5
—
身長:160cm
体重:55kg
BMI:21.5
💡 関数のメリットを実感
この関数があれば:
何人分でも簡単に計算できる
計算式を1箇所に書くだけでいい
計算式を変更したくなっても、関数の定義を1箇所変えるだけ
コードが読みやすくなる(calculate_bmi(170, 65)で何をしているか一目瞭然)
📤 4. 戻り値(return)
計算結果を「返す」
今までの関数は、結果を表示するだけでした。でも、return を使うと、計算結果を返す ことができます。返された値は、変数に入れたり、他の計算に使ったりできます。
📌 戻り値の役割
戻り値 とは、関数が返す「結果」です。
料理に例えると:
プログラムでは:
返された値は:
変数に入れられる
他の計算に使える
別の関数に渡せる
値を返す関数
returnの後に値を書くことで、その値を関数の外に返すことができます。
# 2つの数を足して結果を返す
def add(a, b):
result = a + b
return result
# 戻り値を変数に入れる
answer = add(5, 3)
print(answer)
# 計算に使うこともできる
total = add(10, 20) + add(30, 40)
print(total)
8
100
💡 コードの詳しい説明
return result
return – 「値を返す」という命令
resultの値を呼び出し元に返す
returnに到達すると、関数はそこで終了する
answer = add(5, 3)
add(5, 3)が実行される
5 + 3 = 8 が計算される
8が返されて、answerに代入される
total = add(10, 20) + add(30, 40)
add(10, 20)が30を返す
add(30, 40)が70を返す
30 + 70 = 100 が計算される
totalに100が代入される
printとreturnの違い
printとreturnは、全く違う動作をします。この違いを理解することが非常に重要です!
📌 printとreturnの違い
命令
動作
使いどころ
print
画面に表示するだけ 値は返さない
結果を見たい時 デバッグ
return
値を返す 他の計算に使える
計算結果を変数に入れたい 他の関数に渡したい
# printを使う関数
def add_print(a, b):
result = a + b
print(result)
# returnを使う関数
def add_return(a, b):
result = a + b
return result
# printの場合
print(“=== printの場合 ===”)
x = add_print(5, 3) # 画面に8と表示される
print(f”xの値: {x}”) # xはNone
# returnの場合
print(“\n=== returnの場合 ===”)
y = add_return(5, 3) # 画面には何も表示されない
print(f”yの値: {y}”) # yは8
=== printの場合 ===
8
xの値: None
=== returnの場合 ===
yの値: 8
💡 違いの説明
printの場合:
関数の中で8が表示される
でも値は返されない
xにはNone(何もない)が入る
計算に使えない!
returnの場合:
関数の中では何も表示されない
8という値が返される
yには8が入る
返された値を自由に使える!
🔑 重要なポイント
returnに到達すると関数が終了: returnの後のコードは実行されない
1つの関数に複数のreturn: 条件によって返す値を変えることができる
returnがない関数: 自動的にNoneを返す
複数の値を返す
Pythonでは、1つの関数から複数の値を返すことができます。カンマで区切って書くだけです。
# 四則演算の結果を全て返す
def calc(a, b):
add_result = a + b
sub_result = a – b
mul_result = a * b
div_result = a / b
return add_result, sub_result, mul_result, div_result
# 複数の戻り値を受け取る
add, sub, mul, div = calc(10, 2)
print(f”足し算:{add}”)
print(f”引き算:{sub}”)
print(f”掛け算:{mul}”)
print(f”割り算:{div}”)
足し算:12
引き算:8
掛け算:20
割り算:5.0
💡 複数の戻り値の説明
return add_result, sub_result, mul_result, div_result
カンマで区切って複数の値を返す
実際には、タプル(組)として返される
4つの値が1つのまとまりとして返される
add, sub, mul, div = calc(10, 2)
返された4つの値を、4つの変数で受け取る
順番通りに代入される
変数の数と戻り値の数が一致しないとエラー
実践例:平均値を計算する関数
リストの平均値を計算して返す関数を作りましょう。これは実際のデータ分析でよく使います。
# リストの平均値を計算して返す
def calculate_average(numbers):
total = sum(numbers)
count = len(numbers)
average = total / count
return average
# 使用例
scores = [85, 92, 78, 95, 88]
avg = calculate_average(scores)
print(f”平均点:{avg}点”)
# 別のデータでも使える
temperatures = [18.5, 21.2, 19.8, 22.5, 20.1]
avg_temp = calculate_average(temperatures)
print(f”平均気温:{avg_temp:.1f}℃”)
平均点:87.6点
平均気温:20.4℃
💡 関数の再利用性
同じ関数を、点数の平均、気温の平均など、いろんな場面で使えます。これが関数の大きなメリットです!
🎛️ 5. デフォルト引数
引数に「初期値」を設定する
デフォルト引数 を使うと、引数が渡されなかった場合の初期値を設定できます。よく使う値がある場合、それをデフォルトにしておくと便利です。
📌 デフォルト引数の使いどころ
よく使う値がある場合、それをデフォルトにしておくと便利です。例えば:
消費税の計算 → 税率は通常10%(デフォルト)
挨拶 → 「こんにちは」が通常の挨拶(デフォルト)
割引計算 → 割引なし(0%)がデフォルト
デフォルト引数の使い方
引数名の後に=値と書くことで、デフォルト値を設定できます。
# デフォルト引数を持つ関数
def greet(name, greeting=”こんにちは”):
print(f”{greeting}、{name}さん!”)
# 引数を2つ渡す
greet(“太郎”, “おはよう”)
# greetingを省略(デフォルト値が使われる)
greet(“花子”)
# もう一度省略
greet(“次郎”)
おはよう、太郎さん!
こんにちは、花子さん!
こんにちは、次郎さん!
💡 コードの詳しい説明
def greet(name, greeting=”こんにちは”):
greeting="こんにちは"と書く
これがデフォルト値
greetingが省略されたら、"こんにちは"が使われる
greet(“太郎”, “おはよう”)
2つの引数を渡しているので、"おはよう"が使われる
greet(“花子”)
greetingを省略しているので、デフォルトの"こんにちは"が使われる
実践例:消費税計算
消費税を計算する関数を作りましょう。税率は通常10%なので、それをデフォルトにします。
# 消費税を計算(税率はデフォルトで10%)
def add_tax(price, tax_rate=0.1):
tax = price * tax_rate
total = price + tax
return total
# 税率10%(デフォルト)
print(f”1000円(10%税込): {add_tax(1000)}円”)
# 税率8%を指定
print(f”1000円(8%税込): {add_tax(1000, 0.08)}円”)
# 税率5%を指定
print(f”1000円(5%税込): {add_tax(1000, 0.05)}円”)
1000円(10%税込): 1100.0円
1000円(8%税込): 1080.0円
1000円(5%税込): 1050.0円
⚠️ デフォルト引数の順番
デフォルト引数は、通常の引数の後 に書く必要があります。
❌ def func(a=1, b) → エラー
✅ def func(b, a=1) → OK
理由:
func(5)と呼んだ時、5がaに入るのかbに入るのか曖昧になるため
通常の引数を先に、デフォルト引数を後にすることで、この問題を避ける
📊 6. データ分析でよく使う関数
データ分析では、同じような処理を何度も行います。関数にしておくと便利です。実際に使える関数をいくつか作ってみましょう。
例1:最大値・最小値を見つける
def find_max_min(numbers):
“””リストの最大値と最小値を返す”””
max_value = max(numbers)
min_value = min(numbers)
return max_value, min_value
# 使用例
data = [45, 78, 23, 91, 56, 34, 89]
max_val, min_val = find_max_min(data)
print(f”最大値:{max_val}”)
print(f”最小値:{min_val}”)
print(f”範囲:{max_val – min_val}”)
最大値:91
最小値:23
範囲:68
💡 ドキュメント文字列
“””リストの最大値と最小値を返す”””
関数の最初に書く説明文
3つのダブルクォート(”””)で囲む
関数が何をするか説明する
良い習慣なので、書くようにしましょう
例2:データのフィルタリング
特定の条件に合うデータだけを抽出する関数を作りましょう。
def filter_by_threshold(numbers, threshold):
“””閾値以上の値だけを返す”””
result = []
for num in numbers:
if num >= threshold:
result.append(num)
return result
# 使用例:80点以上の点数を抽出
scores = [95, 72, 88, 91, 65, 78, 85]
high_scores = filter_by_threshold(scores, 80)
print(f”80点以上の点数:{high_scores}”)
print(f”人数:{len(high_scores)}人”)
80点以上の点数:[95, 88, 91, 85]
人数:4人
例3:データの正規化
データを0〜1の範囲に変換する関数を作りましょう。これは機械学習でよく使います。
def normalize(numbers):
“””データを0〜1の範囲に正規化”””
min_val = min(numbers)
max_val = max(numbers)
range_val = max_val – min_val
normalized = []
for num in numbers:
norm = (num – min_val) / range_val
normalized.append(norm)
return normalized
# 使用例
data = [10, 20, 30, 40, 50]
norm_data = normalize(data)
print(“元のデータ:”, data)
print(“正規化後:”, [f”{x:.2f}” for x in norm_data])
元のデータ: [10, 20, 30, 40, 50]
正規化後: [‘0.00’, ‘0.25’, ‘0.50’, ‘0.75’, ‘1.00’]
💡 正規化とは
データの範囲を0〜1に変換することです。異なるスケールのデータを比較する時に使います。
例:
10〜50のデータ → 0.00〜1.00に変換
最小値(10)が0.00になる
最大値(50)が1.00になる
中間の値は、その比率に応じて変換される
📝 練習問題
ここまで学んだことを、実際に手を動かして確認しましょう!
問題 1
基本
挨拶関数を作る
名前を引数として受け取り、「〇〇さん、こんにちは!」と表示する関数greetを作成してください。
解答例を見る
def greet(name):
print(f”{name}さん、こんにちは!”)
# テスト
greet(“太郎”)
greet(“花子”)
太郎さん、こんにちは!
花子さん、こんにちは!
問題 2
基本
掛け算関数
2つの数を受け取って、その積を返す関数multiplyを作成してください。
解答例を見る
def multiply(a, b):
return a * b
# テスト
print(multiply(5, 3))
print(multiply(10, 7))
result = multiply(12, 8)
print(f”12 × 8 = {result}”)
15
70
12 × 8 = 96
問題 3
応用
偶数・奇数判定関数
数値を受け取って、偶数なら「偶数」、奇数なら「奇数」という文字列を返す関数is_even_or_oddを作成してください。
解答例を見る
def is_even_or_odd(number):
if number % 2 == 0:
return “偶数”
else:
return “奇数”
# テスト
print(f”10は{is_even_or_odd(10)}”)
print(f”7は{is_even_or_odd(7)}”)
print(f”0は{is_even_or_odd(0)}”)
10は偶数
7は奇数
0は偶数
問題 4
応用
合計と平均を返す関数
数値のリストを受け取って、合計と平均を返す関数calc_sum_avgを作成してください。
解答例を見る
def calc_sum_avg(numbers):
total = sum(numbers)
average = total / len(numbers)
return total, average
# テスト
scores = [85, 92, 78, 95, 88]
total, avg = calc_sum_avg(scores)
print(f”合計:{total}点”)
print(f”平均:{avg}点”)
合計:438点
平均:87.6点
問題 5
チャレンジ
温度変換関数
摂氏温度(℃)を華氏温度(°F)に変換する関数celsius_to_fahrenheitを作成してください。
公式:°F = ℃ × 9/5 + 32
デフォルト引数で、小数点以下の桁数(デフォルト1桁)を指定できるようにしてください。
解答例を見る
def celsius_to_fahrenheit(celsius, decimal_places=1):
fahrenheit = celsius * 9/5 + 32
return round(fahrenheit, decimal_places)
# テスト
print(f”0℃ = {celsius_to_fahrenheit(0)}°F”)
print(f”25℃ = {celsius_to_fahrenheit(25)}°F”)
print(f”100℃ = {celsius_to_fahrenheit(100)}°F”)
# 小数点以下2桁で表示
print(f”36.5℃ = {celsius_to_fahrenheit(36.5, 2)}°F”)
0℃ = 32.0°F
25℃ = 77.0°F
100℃ = 212.0°F
36.5℃ = 97.7°F
🎯 このステップのまとめ
✅ 学んだこと
def で関数を定義できる
引数 で関数に値を渡せる
return で値を返せる
デフォルト引数 で初期値を設定できる
関数を使ってコードを整理・再利用できる
複数の戻り値を返すこともできる
printとreturnの違いを理解した
ドキュメント文字列で関数を説明できる
🎓 次のステップに進む前に
def文で関数を定義できますか?
引数を使って値を渡せますか?
returnで値を返せますか?
デフォルト引数を使えますか?
printとreturnの違いがわかりますか?
これらができたら、次のステップに進みましょう!
❓ よくある質問
Q1: 関数名にはどんな名前をつけるべきですか?
動詞 で始める名前が良いです。例えば、calculate_average(平均を計算する)、find_max(最大値を見つける)、convert_temperature(温度を変換する)など。何をする関数かわかりやすくしましょう。小文字とアンダースコアを使うのがPythonの慣習です。
Q2: printとreturnの違いは何ですか?
print は画面に表示するだけ(値は返さない)、return は値を返して他の計算に使えます。関数の結果を変数に入れたり、計算に使いたい場合はreturnを使いましょう。
Q3: returnの後のコードは実行されますか?
いいえ、returnに到達すると関数が終了 します。return以降のコードは実行されません。これを利用して、条件によって早めに関数を終了することもできます。
Q4: 関数の中で定義した変数は外で使えますか?
いいえ、関数の中で定義した変数はローカル変数 といって、関数の外では使えません。これを「スコープ(範囲)」といいます。関数の外で使いたい値は、returnで返す必要があります。
Q5: 引数はいくつでも受け取れますか?
はい、いくつでも受け取れます。ただし、引数が多すぎると使いにくくなります。一般的には3〜5個までが適切です。それ以上必要な場合は、リストや辞書にまとめて渡すことを検討しましょう。
Q6: returnは必須ですか?
いいえ、returnは省略できます。returnがない関数は、自動的にNoneを返します。画面に表示するだけの関数(printだけ)なら、returnは不要です。
Q7: 関数の中で別の関数を呼び出せますか?
はい、できます。関数の中で別の関数を呼び出すことは、とても一般的です。複雑な処理を小さな関数に分けることで、コードが読みやすくなります。
Q8: ドキュメント文字列は必要ですか?
必須ではありませんが、書くことを強く推奨 します。後で自分がコードを見返したとき、何をする関数かすぐにわかります。他の人がコードを読むときも役立ちます。
×
artnasekai
#artnasekai #学習メモ