関数とは?プログラミング初心者向けにPythonでわかりやすく解説

プログラミング

プログラミングを勉強していると、「関数」という言葉がよく出てきます。

「関数って何?」
「なぜ関数を使うの?」
「引数や戻り値ってどういう意味?」

と疑問に思う人も多いのではないでしょうか。

関数とは、簡単にいうと、

複数の処理をひとまとまりにして、必要なときに呼び出せる仕組み

です。

たとえば、毎回同じ計算や同じ表示処理を書くのではなく、処理を1つの関数にまとめておけば、必要なときに何度でも再利用できます。

この記事では、プログラミング初心者や高校生向けに、関数とは何かをPythonのサンプルコードを使ってわかりやすく解説します。

関数とは

関数とは、決まった処理をひとつにまとめたものです。

たとえば、

名前を表示する

という処理が何度も必要になる場合を考えてみましょう。

毎回、

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

のように引数や戻り値を使うことで、より便利な関数を作れます。

関数を使うと、

  • 同じ処理を再利用できる
  • コードを短くできる
  • プログラムを整理できる
  • 修正しやすくなる
  • 大きなプログラムを分割できる

といったメリットがあります。

これまで学んできた、

変数 → 条件分岐 → 繰り返し処理 → 配列・リスト → 関数

まで理解できると、プログラミングの基礎がかなり形になってきます。

次は、関数をより深く理解するために「引数と戻り値」について学ぶとよいでしょう。