
Table of Contents(目次)
1. 関数の最小構成を知ろう
ここまでの学習で、みなさんは変数、データ型・データ構造、そして条件分岐や繰り返し処理を学んできました。これらを使うと、簡単なプログラムは書けるようになります。
しかし、プログラムが少し長くなってくると、「同じ処理を何度も書くのが面倒」「同じような処理をまとめたい」と感じるはずです。そんなときに使うのが「関数」です。
関数とは、処理を1つのまとまりとして定義する仕組みのことです。これを使うと、同じ処理を繰り返し呼び出せるようになり、プログラムがぐっと整理されます。
まずは、関数の最小構成を見てみましょう。
def sample():
return
sample() # 関数の実行
この形を、まずは基本形として覚えておきましょう。実は、returnを省略してもエラーにはなりませんが、「関数は結果を返して終了する」と考えると、最初からこの形で覚えておくと後々スムーズです。
関数を定義するには、次の要素が必要です。
def | define(「定義する」という意味)の略で、関数を定義するときに使うキーワードです。 |
関数名 | 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が実行されることはありません。






