プログラミングを勉強していると、「関数」という言葉がよく出てきます。
「関数って何?」
「なぜ関数を使うの?」
「引数や戻り値ってどういう意味?」
と疑問に思う人も多いのではないでしょうか。
関数とは、簡単にいうと、
複数の処理をひとまとまりにして、必要なときに呼び出せる仕組み
です。
たとえば、毎回同じ計算や同じ表示処理を書くのではなく、処理を1つの関数にまとめておけば、必要なときに何度でも再利用できます。
この記事では、プログラミング初心者や高校生向けに、関数とは何かをPythonのサンプルコードを使ってわかりやすく解説します。
- 関数とは
- なぜ関数を使うのか
- 関数を使うメリット
- Pythonで関数を作る方法
- defとは
- 関数を呼び出すとは
- 引数とは
- 引数を使うメリット
- 複数の引数を渡す
- 戻り値とは
- printとreturnの違い
- 戻り値を使ってさらに計算する
- 条件分岐と関数を組み合わせる
- 繰り返し処理と関数を組み合わせる
- リストと関数を組み合わせる
- 合計点を求める関数
- 平均点を求める関数
- 関数を使うとコードが整理しやすい
- 同じ処理を何度も使える
- 関数名は分かりやすくする
- 関数の中で作った変数
- 関数とメソッドの違い
- Pythonには最初から使える関数もある
- 実際のWebシステムでも関数は使われる
- 関数を使わない場合
- よくある間違い1 関数を呼び出していない
- よくある間違い2 returnを書いたあとの処理
- よくある間違い3 引数の数
- 関数を理解するコツ
- 練習問題
- まとめ
関数とは
関数とは、決まった処理をひとつにまとめたものです。
たとえば、
名前を表示する
という処理が何度も必要になる場合を考えてみましょう。
毎回、
print("山田")
と書いてもよいのですが、同じ処理が何度も出てくるとコードが長くなります。
そこで、関数を使います。
def show_name():
print("山田")
これで、
show_name()
と書くだけで、
山田
と表示できます。
なぜ関数を使うのか
関数を使う主な理由は、同じ処理を何度も書かなくて済むからです。
たとえば、3回同じ表示をしたい場合、
print("こんにちは")
print("こんにちは")
print("こんにちは")
と書くこともできます。
しかし、関数にすると、
def hello():
print("こんにちは")
として、
hello()
hello()
hello()
と呼び出せます。
処理内容を変更したい場合も、関数の中だけ直せばよいため、修正しやすくなります。
関数を使うメリット
関数を使うと、主に次のようなメリットがあります。
- 同じ処理を何度も書かなくてよい
- コードが読みやすくなる
- 修正しやすくなる
- 処理ごとに整理できる
- 他の場所から再利用できる
プログラムが大きくなるほど、関数を使って処理を分けることが重要になります。
Pythonで関数を作る方法
Pythonでは、def を使って関数を作ります。
基本的な書き方は、
def 関数名():
処理
です。
たとえば、
def greeting():
print("こんにちは")
とします。
この関数を実行するには、
greeting()
と書きます。
実行結果は、
こんにちは
となります。
defとは
def は、Pythonで関数を定義するときに使うキーワードです。
def greeting():
は、
「greetingという名前の関数を作る」
という意味です。
関数名は、自分で分かりやすい名前を付けます。
たとえば、
def show_score():
や、
def calculate_total():
のように、何をする関数なのかが分かる名前にするとよいでしょう。
関数を呼び出すとは
関数を作っただけでは、その処理は実行されません。
たとえば、
def greeting():
print("こんにちは")
と書いただけでは、何も表示されません。
実行するには、
greeting()
と書きます。
これを「関数を呼び出す」といいます。
引数とは
関数には、外からデータを渡すことができます。
そのときに使うのが「引数」です。
たとえば、
def greeting(name):
print("こんにちは", name)
という関数を作ります。
次に、
greeting("山田")
とすると、
こんにちは 山田
と表示されます。
この "山田" が、関数に渡している引数です。
引数を使うメリット
引数を使うと、同じ関数でも違うデータを使って処理できます。
たとえば、
def greeting(name):
print("こんにちは", name)
に対して、
greeting("山田")
greeting("佐藤")
greeting("鈴木")
とすると、
こんにちは 山田
こんにちは 佐藤
こんにちは 鈴木
と表示されます。
同じ関数を使いながら、渡すデータだけを変えています。
複数の引数を渡す
引数は1つだけとは限りません。
複数のデータを渡すこともできます。
def add(a, b):
print(a + b)
この関数に、
add(10, 20)
と渡すと、
30
と表示されます。
ここでは、
a = 10
b = 20
として処理されています。
戻り値とは
関数では、処理した結果を呼び出した側へ返すこともできます。
これを「戻り値」といいます。
Pythonでは、return を使います。
たとえば、
def add(a, b):
return a + b
とします。
この関数を、
result = add(10, 20)
print(result)
とすると、
30
と表示されます。
add(10, 20) の結果である30が、result に代入されています。
printとreturnの違い
初心者が混乱しやすいのが、print と return の違いです。
たとえば、
def add(a, b):
print(a + b)
の場合は、計算結果を画面に表示しています。
一方、
def add(a, b):
return a + b
の場合は、計算結果を関数の外へ返しています。
イメージとしては、
print
→ 画面に表示する
return
→ 計算結果を呼び出し元に返す
という違いです。
戻り値を使ってさらに計算する
戻り値を使うと、その結果をさらに別の処理に使えます。
def add(a, b):
return a + b
result = add(10, 20)
answer = result * 2
print(answer)
実行結果は、
60
となります。
このように、関数の結果を別の計算に利用できます。
条件分岐と関数を組み合わせる
関数の中で条件分岐を使うこともできます。
たとえば、
def check_score(score):
if score >= 60:
return "合格"
else:
return "不合格"
この関数を、
result = check_score(75)
print(result)
とすると、
合格
と表示されます。
ここでは、
- 関数
- 引数
- 条件分岐
- 戻り値
を組み合わせています。
繰り返し処理と関数を組み合わせる
関数と繰り返し処理も組み合わせられます。
たとえば、
def show_number(number):
print(number)
for i in range(1, 6):
show_number(i)
実行結果は、
1
2
3
4
5
となります。
for文の中から関数を呼び出しています。
ここまでに学習した内容を復習したい方は、以下の記事も参考にしてください。
- 配列・リストとは
- 条件分岐とは
- 繰り返し処理とは
リストと関数を組み合わせる
前回学んだリストと関数を組み合わせることもできます。
def show_scores(scores):
for score in scores:
print(score)
次に、
scores = [70, 80, 90]
show_scores(scores)
とすると、
70
80
90
と表示されます。
このように、リストを関数へ渡して処理できます。
合計点を求める関数
リストを使って合計点を求める関数を作ってみましょう。
def calculate_total(scores):
total = 0
for score in scores:
total = total + score
return total
次に、
scores = [70, 80, 90]
result = calculate_total(scores)
print(result)
とすると、
240
と表示されます。
平均点を求める関数
さらに、平均点を計算する関数も作れます。
def calculate_average(scores):
total = 0
for score in scores:
total = total + score
return total / len(scores)
実行してみます。
scores = [70, 80, 90]
average = calculate_average(scores)
print(average)
結果は、
80.0
です。
関数を使うとコードが整理しやすい
関数を使うと、処理ごとにコードを分けられます。
たとえば、
def input_data():
pass
def calculate_total():
pass
def show_result():
pass
のように、
データ入力
計算
結果表示
という処理ごとに関数を分けられます。
プログラムが大きくなっても、何をしている処理なのか分かりやすくなります。
同じ処理を何度も使える
関数の大きなメリットは再利用できることです。
たとえば、
def tax_price(price):
return price * 1.1
という関数があれば、
print(tax_price(1000))
print(tax_price(2000))
print(tax_price(5000))
のように何度でも利用できます。
税率の計算方法を変更したい場合も、関数の中だけ変更すれば済みます。
関数名は分かりやすくする
関数名は自由に付けられますが、何をする関数なのかが分かる名前にしましょう。
たとえば、
def a():
よりも、
def calculate_average():
のほうが、何をする関数なのか理解しやすくなります。
プログラムを書くときは、
後から見ても意味が分かる名前
を付けることが大切です。
関数の中で作った変数
関数の中で作った変数は、基本的にはその関数の中で使います。
たとえば、
def test():
message = "こんにちは"
print(message)
この message は、関数の中で使われる変数です。
このように変数が使える範囲のことを「スコープ」といいます。
初心者のうちは、
関数の中の変数は、その関数の中で使う
と考えておけばよいでしょう。
関数とメソッドの違い
Pythonを勉強していると「メソッド」という言葉も出てきます。
たとえば、
fruits.append("りんご")
の append() はメソッドです。
関数とメソッドは似ていますが、簡単にいうと、
関数
→ 単独で呼び出す処理
メソッド
→ あるデータやオブジェクトに対して使う処理
と考えるとよいでしょう。
たとえば、
print()
len()
は関数です。
一方、
fruits.append()
はリストに対して使うメソッドです。
Pythonには最初から使える関数もある
Pythonには、自分で関数を作らなくても最初から利用できる関数があります。
たとえば、
print()
も関数です。
他にも、
len()
や、
max()
min()
などがあります。
たとえば、
scores = [70, 80, 90]
print(max(scores))
とすると、
90
と表示されます。
これらはPythonに最初から用意されている関数です。
実際のWebシステムでも関数は使われる
関数は、実際のWebサイトやアプリでも非常によく使われます。
たとえば、
ログインする処理
商品を登録する処理
合計金額を計算する処理
メールを送信する処理
ユーザー情報を表示する処理
などを、それぞれ関数として分けることがあります。
プログラムが大きくなるほど、
1つの大きな処理を書くのではなく、小さな関数に分ける
ことが重要になります。
関数を使わない場合
たとえば、税込価格を3回計算するとします。
price1 = 1000 * 1.1
price2 = 2000 * 1.1
price3 = 3000 * 1.1
これでも計算できます。
しかし、同じ計算式を何度も書いています。
関数にすると、
def tax_price(price):
return price * 1.1
として、
price1 = tax_price(1000)
price2 = tax_price(2000)
price3 = tax_price(3000)
と書けます。
こちらのほうが、何をしている処理なのか分かりやすくなります。
よくある間違い1 関数を呼び出していない
関数を定義しただけでは実行されません。
def hello():
print("こんにちは")
だけでは、何も表示されません。
必ず、
hello()
と呼び出す必要があります。
よくある間違い2 returnを書いたあとの処理
return が実行されると、その関数の処理はそこで終了します。
たとえば、
def test():
return 10
print("こんにちは")
では、
print("こんにちは")
は実行されません。
return の後ろに書いた処理が実行されないことに注意しましょう。
よくある間違い3 引数の数
たとえば、
def add(a, b):
return a + b
という関数は、2つの引数を必要とします。
そのため、
add(10)
のように1つしか渡さないとエラーになります。
正しくは、
add(10, 20)
です。
関数を理解するコツ
関数を理解するときは、
「入力 → 処理 → 出力」
と考えると分かりやすくなります。
たとえば、
def add(a, b):
return a + b
なら、
入力
10, 20
↓
処理
10 + 20
↓
出力
30
となります。
引数が「入力」、関数の中身が「処理」、戻り値が「出力」です。
練習問題
最後に簡単な練習問題をやってみましょう。
2つの数字を受け取り、その合計を返す関数を作ってください。
解答例
def add(a, b):
return a + b
実行してみます。
result = add(10, 20)
print(result)
実行結果は、
30
となります。
次に、点数を受け取って60点以上なら「合格」、それ以外なら「不合格」を返す関数を作ってみましょう。
解答例
def check_score(score):
if score >= 60:
return "合格"
else:
return "不合格"
実行します。
result = check_score(75)
print(result)
結果は、
合格
です。
ここでは、
関数 + 引数 + 条件分岐 + 戻り値
を組み合わせています。
まとめ
関数とは、
複数の処理をひとまとまりにして、必要なときに呼び出せる仕組み
です。
Pythonでは、
def 関数名():
処理
のように関数を作ります。
さらに、
def add(a, b):
return a + b
のように引数や戻り値を使うことで、より便利な関数を作れます。
関数を使うと、
- 同じ処理を再利用できる
- コードを短くできる
- プログラムを整理できる
- 修正しやすくなる
- 大きなプログラムを分割できる
といったメリットがあります。
これまで学んできた、
変数 → 条件分岐 → 繰り返し処理 → 配列・リスト → 関数
まで理解できると、プログラミングの基礎がかなり形になってきます。
次は、関数をより深く理解するために「引数と戻り値」について学ぶとよいでしょう。

