sec03 - 【Python入門】関数の基本とreturnの使い方を徹底解説
スポンサーリンク

1. 関数の最小構成を知ろう

ここまでの学習で、みなさんは変数、データ型・データ構造、そして条件分岐や繰り返し処理を学んできました。これらを使うと、簡単なプログラムは書けるようになります。

しかし、プログラムが少し長くなってくると、「同じ処理を何度も書くのが面倒」「同じような処理をまとめたい」と感じるはずです。そんなときに使うのが「関数」です。

関数とは、処理を1つのまとまりとして定義する仕組みのことです。これを使うと、同じ処理を繰り返し呼び出せるようになり、プログラムがぐっと整理されます。

まずは、関数の最小構成を見てみましょう。

def sample():
    return

sample()  # 関数の実行

この形を、まずは基本形として覚えておきましょう。実は、returnを省略してもエラーにはなりませんが、「関数は結果を返して終了する」と考えると、最初からこの形で覚えておくと後々スムーズです。

関数を定義するには、次の要素が必要です。

defdefine(「定義する」という意味)の略で、関数を定義するときに使うキーワードです。
関数名defの後に1つ空白を空け、関数名を記述します。関数名の命名規則は変数名と同じです。半角英数字とアンダースコアのみを使い、数字で始めないようにします。
丸カッコ()関数名の後に丸カッコ()を記述します。パラメーター(引数の値を受け取るもの)が必要な関数の場合は、この丸カッコの中で定義します。パラメータが必要ない関数であっても、必ず丸カッコ()を記述します。
コロン:コロンは、関数の定義の終わりを示すものです。
return関数の処理を終了し、必要があれば値を返すためのキーワードです。

関数を実行する時はsample()のように、関数名と丸カッコを記述します。これまで、print()round()のような関数を実行してきましたが、自分で定義した関数も同じルールで実行させます。丸カッコ()を付けないと、変数のように関数の情報を参照することになります。丸カッコ()を付けることで、Pythonはその関数を実行させるという事を認識します。

2. returnあり・なしの違いを見てみよう

returnを使うと、関数の処理を途中で終了させることができます。逆に、returnがなければ、関数の最後の行まで実行された時点で自動的に終了します。

もし、関数の中にreturnがない場合や、return行が実行されなかった場合は、関数の最終行を実行し終えた時点で処理が終了し、暗黙的にNoneが返されます。

実際に、returnのある関数と、ない関数を比較してみましょう。

def with_return():
    print('処理を開始します: with_return()')
    return
    print('この行は実行されません')

def without_return():
    print('処理を開始します: without_return()')
    print('この行も実行されます')

with_return()
without_return()

このコードを実行すると、出力結果は次のようになります。

処理を開始します: with_return()
処理を開始します: without_return()
この行も実行されます

このように、with_return()ではreturnの行に到達した時点で関数の処理が終了するため、その後の行は実行されません。一方、without_return()では最後の行まで実行されています。

returnは「関数を終了させるスイッチ」のようなものだと覚えておくと良いでしょう。条件によって処理を打ち切りたい場合などに、非常に役立ちます。

スポンサーリンク

3. 関数から値を返す

ここまでは、returnの『関数を終了させる』という機能を見てきましたが、returnには『値を返す』というもう1つの重要な機能があります。returnで返す値の事を『返り値(Return Value)』と言います。

返り値を記述しなかった場合は、Noneが返ります。None以外の値を返したい場合は、returnの後に空白を空け、返したい値を記述します。

関数から値を返すことで、「処理の結果」を呼び出し元で受け取ることができます。

次の例を見てください。

def say_hello():
    return 'Hello'

message = say_hello()
print(message)

実行結果は次の通りです。

Hello

このように、say_hello()関数を呼び出すと、returnで指定した文字列が呼び出し元に返され、その値は変数messageに代入されます。

なお、返り値として複数の値を返したい場合は、カンマで区切ってそれぞれの値を指定するか、listやdictのようなデータ構造に値をまとめて返します。

次のように記述することができます。

def sample():
    a = 1
    b = 2
    c = 3
    return a, b, c

print(sample())

出力結果:

(1, 2, 3)

複数の値が返されるように定義した場合、sample()からの返り値は、tupleにまとめられて返ってきます。

4. 複数のreturnが存在する関数

関数の中にreturnを複数書くこともできます。条件によって、返す値を変えたいときに使います。

現在時刻を調べて、時刻に応じたあいさつを返す関数を作ってみましょう。datetimeモジュールをimportすることで、現在時刻などの情報を取得することができます。

import datetime

def greeting_now():
    # 現在時刻の"時(hour)"を取得する
    now = datetime.datetime.now().hour

    if now < 12:
        return 'おはようございます'
    elif now < 18:
        return 'こんにちは'
    else:
        return 'こんばんは'

    return 'この行のreturnは実行されません'

print(greeting_now())

実行すると、現在の時間帯に応じて、適切なあいさつ文が表示されます。

ここで覚えておきたいポイントは、「returnは複数書けるが、最初に実行されたreturnで関数が終了する」ということです。つまり、条件に当てはまった最初のreturnだけが実行され、以降の処理は無視されます。

上記例では、if - elif - elseの条件のいずれかでreturnが実行されるため、14行目のreturnが実行されることはありません。

スポンサーリンク