Pythonにおけるreturn文の機能と使い方とは?サンプルプログラムでわかりやすく解説!

- システム
エンジニア - Pythonのreturn文はどのような働きがあるのですか。
- プロジェクト
マネージャー - return文は「関数」から呼び出し側へリターンするための命令文です。
Pythonにおけるreturn文
プログラミング言語Pythonにおけるreturn文について解説します。return文は「関数」から呼び出し側へ復帰(リターン)するための命令文です。つまりreturn文を理解するためには「関数」についてまず理解しなければなりません。また、return文が返す値はオブジェクトになりますのでオブジェクトについても理解する必要があります。
Pythonにおける関数とは?
Pythonにおける関数とは、数学で云うところの関数と考え方は同じです。「何らかの値を関数へ渡すとそれを演算して結果を返す」ということです。
ただし、数学の関数と少し異なるところがあります。関数に渡す何らかの値(「引数」と言います)は0個以上であり、不要であれば引数を渡す必要はありません。また結果(「戻り値」と言います)も不要であれば返す必要はありません。更に関数が行う処理についてもプログラマが自由に記述することができます。
下記のサンプルプログラムは’hello world’と表示するだけの関数(prn_hw)です。関数はdef文を使って定義します。prn_hw関数に引数と戻り値はありません。
1
2
3
4
5
|
<br>
def prn_hw(): # 関数定義<br>
print('hello world')<br>
prn_hw() # 関数呼び出し<br>
|
return文が返す戻り値
Pythonのreturn文では型の異なる複数の値を戻り値として返すことができます。下記のサンプルプログラムを実行しますと変数tはタプル型(後述)として、変数a、b、cはそれぞれ整数型、実数型、str型として、戻り値を受け取ることができます。
なお戻り値を受け取る変数の数は1つ、またはreturn文で返す戻り値の個数ちょうどでなければなりません。それ以外の数を指定した場合はエラーになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<br>
# Example1 は型の異なる3つの戻り値を返すだけの関数です<br>
def Example1():<br>
x = 10<br>
y = 3.14<br>
z = 'string'<br>
return x,y,z # カンマで区切ることで複数の戻り値を返すことができます<br>
# 変数 t ひとつで戻り値3つを受け取ります(タプル型で受け取ります)<br>
t = Example1() <br>
print(t)<br>
# a,b,cの3つの変数で戻り値を受け取ります<br>
a,b,c = Example1() <br>
print(a,b,c)<br>
|
タプル型とは?
変数には「型」というものがあります。Pythonの場合、「型」は値を変数に格納する際に自動的に決まります。
他の多くの言語の場合ではint型(整数型)は4バイトとかdouble型(実数型)は8バイトとか使用するメモリサイズが決まっています。それに対しPythonの場合、メモリサイズは可変長です。更に「型」はすべてオブジェクトとして扱われているため、沢山のメモリを消費します。しかし、その代わりリスト型やタプル型、ディクショナリ型などの便利な「型」を使うことができます。
タプル型とは型の異なる値(オブジェクト)を順番に並べて番号でアクセスできるようにしたものです。言葉では分かりにくいかと思いますのでサンプルプログラムを示します。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<br>
# タプル型 t を定義<br>
t = (1,2,3,4.0,'five')<br>
# タプル型 t の内容をまとめて表示<br>
print(t)<br>
# タプル型 t の要素とその型名を順番に表示<br>
print(t[0],type(t[0]))<br>
print(t[1],type(t[1]))<br>
print(t[2],type(t[2]))<br>
print(t[3],type(t[3]))<br>
print(t[4],type(t[4]))<br>
|
オブジェクトとは?
Pythonだけに限りませんが、オブジェクトとは大雑把に言いますとデータと命令(メソッド)をひとまとめにしたものの事を言います。データを処理するには命令(メソッド)を使用しますが、それらをひとまとめにしてブラックボックスにしてしまえば、後は使い方さえ分かっていれば中身を気にしなくても良くなりますので開発効率が上がります。
オブジェクトを定義するにはクラスを使います。クラスはオブジェクトの設計図のようなものです。使用するデータやメソッドを定義します。
下記に「何もしない」クラスのサンプルプログラムを示します。「何もしない」クラスのインスタンス(オブジェクト)を作成し、valueアトリビュートに5を代入して、その値を表示するプログラムです。アトリビュートとはインスタンスに作成する変数のようなものです。
1
2
3
4
5
6
7
|
<br>
class MyClass: # クラス MyClass を定義<br>
pass # 「何もしない」ことを意味する特殊な命令です<br>
m = MyClass() # MyClassクラスのインスタンス(オブジェクト)を作成<br>
m.value = 5 # valueアトリビュートに5を代入<br>
print(m.value) # valueアトリビュートの値を表示<br>
|
Pythonにおけるreturn文の使い方
Pythonにおけるreturn文は関数を終了して呼び出し側へ制御を返す機能と、戻り値を返す機能があります。
最初に「関数の途中で制御を返す方法」、続いて「return文でオリジナルオブジェクトを返す方法」についてサンプルプログラムを用いて解説します。
関数の途中で制御を返す方法
通常return文は関数の最後に記述しますが、関数の途中にあるif文の中などにも記述することができます。関数の処理が完了した時点でreturn文を使って終了させることができます。
下記のExample2関数は指定回数だけループするだけの関数ですが、変数iが5になったらreturn文を実行し終了するものです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<br>
# num回繰り返します<br>
# ただし、i=5になったら終了します<br>
def Example2(num):<br>
for i in range(num): # num回繰り返し<br>
if i == 5: # i=5になったらリターン<br>
return(i)<br>
print('i = ' + str(i)) # iの値を表示<br>
return i<br>
ret = Example2(10) # ループ回数=10<br>
print('戻り値 = '+str(ret))<br>
ret = Example2(4) # ループ回数=4<br>
print('戻り値 = '+str(ret))<br>
|
return文でオリジナルオブジェクトを返す方法
Pythonのreturn文ではオブジェクトを返すことができますので当然ですが自作したオリジナルのオブジェクトも戻り値として返すことができます。
下記のサンプルプログラムはセットした幅と高さの値より、面積を求めるAreaClassインスタンス(オブジェクト)をExample3関数で作成し、return文の戻り値として呼び出し側へ返しています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<br>
# 面積を求めるオリジナルのAreaClassクラス<br>
class AreaClass:<br>
def __init__(self): # コンストラクタ(初期化)<br>
self.width = 0<br>
self.height = 0<br>
def set(self, width, height): # 幅と高さをセットするメソッド<br>
self.width = width<br>
self.height = height<br>
def ask(self): # 面積を求めるメソッド<br>
return self.width*self.height<br>
# AreaClassのインスタンスを作成、戻り値として返すだけの関数です<br>
def Example3():<br>
a = AreaClass() # AreaClassのインスタンスを作成<br>
return a # AreaClAreaClassインスタンスを戻り値として返す<br>
e = Example3() # AreaClassインスタンスを作成<br>
e.set(2,3) # 幅に2、高さに3をセット<br>
print(e.ask()) # askメソッドを呼び出して面積を求めて表示する<br>
|
- システム
エンジニア - Pythonのreturn文についてよく分かりました。
- プロジェクト
マネージャー - return文を理解する上で必要な「関数」と「オブジェクト」、「タプル型」についても参考にしてください。
まとめ
Pythonのreturn文には関数を終了して制御を呼び出し側に返す機能と、制御を返す際に戻り値も一緒に返す機能があります。戻り値が複数あるときはタプル型で返りますが、呼び出し側で受け取る変数が複数ある場合にはタプル型ではなく個々の型で受け取ることができます。
Pythonはインタプリタ言語です。そのため一行ずつ入力し、その都度実行&確認ができますので、これからプログラミングを始める方には良いプログラミング言語のひとつです。頑張ってマスターしてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Python新着案件New Job
-
マルチロガーソフト開発/東京都豊島区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都豊島区(池袋駅) -
マルチロガーソフト開発/東京都豊島区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都豊島区(池袋駅) -
商品化予定の振動センサーの運用保守/Python/東京都都内/【WEB面談可】
月給50万~60万円東京都都内(-駅) -
商品化予定の振動センサーの可視化UI開発のテスター/Python/東京都都内/【WEB面談可】
月給25万~35万円東京都都内(-駅) -
商品化予定の振動センサーの運用保守/Python/東京都都内/【WEB面談可】
月給50万~60万円東京都都内(-駅) -
商品化予定の振動センサーの可視化UI開発のテスター/Python/東京都都内/【WEB面談可】
月給25万~35万円東京都都内(-駅)