【Python】関数の定義と呼び出し(def, return)

【Python】関数の定義と呼び出し(def, return)

pythonでは独自の関数を作って、それを使うことが可能です。
例えば、最大値を自動的に見つけ出してくれる関数を一度定義していれば、簡単に何度でも最大値を見つけることができるようになります。
この記事では、Pythonで関数を定義する方法と、その関数をどのようにして使うかをサンプルコードとともに具体的に解説していきます。

動作環境
macOS Catalina(10.15.3), python3.7.6, Atomエディタ1.44.0

関数の定義と呼び出しの概要

関数を定義する方法は簡単で次のように記述するだけです。

def 関数名(引数1, 引数2): 
    <処理>
    return 返り値

上のように記述することで独自の関数が定義できます。
関数に引数1引数2を渡す(与える)ことで、返り値を出力してくれます。

関数名には半角英数で独自の好きな名前をつけられます。
引数返り値は関数の内容によってはあってもなくても大丈夫です。
これらに関しては実例を見た方が理解が早いので、以下にいくつかサンプルを載せます。

引数はあるが、返り値はない例

def print_number(number):
    print(number)

print_number(5)    # 出力結果 → 5

このサンプルコードは、引数はあるが返り値はない例です。
1-2行目でprint_number(number)という関数を定義しており、定義した後に print_number(5)と記述することで関数を呼び出しています。
numberにあたる部分が5になるので、5という数字がターミナルに出力されます。

引数も返り値もない例

def print_number2():
    print(3)

print_number2()    # 出力結果 → 3

このサンプルコードは、引数も返り値もない例です。
1-2行目でprint_number2()という関数を定義しており、print_number2()と記述することで3をprintしてくれます。
決まったテキストを何度も表示させたい場合は、このサンプルのような記述を使うのもいいですね。

引数も返り値もある例

def sum_number(num1, num2):
    sum = num1 + num2
    return sum

sum_value = sum_number(4, 3)
print(sum_value)    # 出力結果 → 7
# または print( sum_number(4, 3) ) と記述しても良い

このサンプルコードは、引数も返り値もある例です。
1-3行目でsum_number(num1, num2)という関数を定義しており、sum_value = sum_number(4, 3)と記述することで返り値の7sum_valueに渡しています。
sum_value7が渡っているので、print(sum_value)と記述することで7がターミナルに出力されます。

最大値を見つける関数 (サンプルコードあり)

上では簡単な例ばかりだったので、もう少しだけ実践的な例を以下に記します。
各月の平均気温の数値データが格納されたcsvファイルを読み込み、その中の最大気温を取り出す処理を実行するサンプルです。

復習はこちら→ データファイルを読み込む方法プログラムを実行する方法

サンプルコード

# averaged temperature in 2018 @ Kyoto city
# 01: month  02: averaged temperature in the daytime
1,3.9
2,4.4
3,10.9
4,16.4
5,20.0
6,23.4
7,29.8
8,29.5
9,23.6
10,18.7
11,13.5
12,8.2
import numpy as np

def search_max(data_array):
    max_value = -100.0
    for line in data_array:
        if max_value <= line:
            max_value = line
    return max_value


data_file = 'AvrgTmp_Kyoto2018.csv'
ave_temperature = np.loadtxt(data_file, delimiter=',', usecols=(1), unpack=True)
max = search_max(ave_temperature)
print("max value is " + str(max))

コードの解説

for line in data_array:

data_arrayという配列から要素を一つずつ取り出しては、以下の処理を行う。」という記述です。

if max_value <= line:

lineには配列の一要素が順々に入ります。 「もし、配列の一要素がmax_valueよりも大きかったら次の処理を行う」という記述です。

max_value = line

max_valueよりもlineが大きかったら「max_valuelineの数値を格納する」という記述です。
これにより、最終的にmax_valueに入っている値が最大値となります。

プログラムを実行しよう

上記のサンプルコードを実行してみましょう。
Desktop/Dr.code/python/data-analysis/def_functionAvrgTmp_Kyoto2018.csvを保存しておきます。
次にターミナルを開いて、cdでcwdをDesktop/Dr.code/python/data-analysis/def_function にして、実行します。
(→やり方がわからない方はプログラムを実行する方法を参考にしてください。)

出力結果

ターミナルで以下のように記述し、returnキーを押すとターミナルにmax value is 29.8と出力されます。

python search_max.py

最後に

もし余力があれば、最小値を出力するコードも書いてみましょう。
最大値を見つける関数の中を少し変えるだけでできますし、勉強になるので是非トライしてみてください。