(1) 関数定義

データを与えると、何かしらの結果を返す機能を関数といいます。与えるデータを引数(ひきすう)といい、返ってくる結果を戻り値といいます。

組み込み関数やモジュールのインポートについては、1-3. 関数 で学びましたが、これ以外にも自分で関数を定義することができます。これを関数定義といい、def文を使います。文献によっては、ユーザー定義関数自作関数、あるいは単に関数と表現されています。

関数の定義(def文)

def 関数名(引数, ...):でユーザー定義関数を定義することができます。行末にはコロン:が必要で、最後のreturnまではインデントを下げます。


        def 関数名(引数, 引数, 引数, ...):
          # ここに関数で行う処理を記述する
          return 関数の戻り値
		  

def文の最後にはreturn文を使って関数の戻り値を指定します(戻り値が不要な関数の場合には、return文は省略可能です)。defはdefine(定義する)の略です。

関数の呼び出し

変数 = 関数名(引数, ...)でユーザー定義関数を呼び出し、戻り値を変数に代入すことができます。


        変数 = 関数名(引数, 引数, 引数, ...)
      

関数の基本形

実際のプログラムの中では次のように書きます。関数は呼び出す前に定義する必要があります。また、関数を定義した後は2行の空白行を入れることが推奨されています。


        def 関数名(引数, 引数, 引数, ...):    # ここからが関数(関数は呼び出されたところで実行される)
          # ここに関数で行う処理を記述する
          return 関数の戻り値    # returnまでが関数
                
                
        # ここからがメインの処理
        変数 = 関数名(引数, 引数, 引数, ...)   # 関数の呼び出し
      

三角形の面積を求める関数

次の例では、底辺baseと高さheightから三角形の面積を求めて返す関数triangle_areaを定義し、底辺3,高さ4の三角形の面積を表示します。


        def triangle_area(base, height):   # 関数を定義。引数としてbaseとheightの2つの値を受け取る。
          area = base * height / 2       # 関数内の処理。baseとheightをかけて2で割り、面積areaに代入する。
          return area                    # 関数はここまで。returnでareaの値を返す。


        area = triangle_area(3, 4)         # 関数の呼び出し。3と4の値を関数triangle_areaに渡し、areaに代入。
        print(area)                        # areaを出力
      
6.0

(2) ユーザー定義関数の例

例1 セ氏から華氏への換算

日本では温度の単位は℃を用い、これをセルシウス温度(セ氏温度)といいます。北米など一部の地域では、単位が「°F」のファーレンハイト温度(華氏温度)を用いています。華氏温度は1724年ドイツの物理学者ファーレンハイトが次のように定めた温度である。当時ファーレンハイトが自宅で図ることができた最も低い温度を0度、ファーレンハイト自身の体温を100度とすることで、マイナス表記のない温度を表現しようとしました。華氏温度は、セ氏温度を5分の9倍し32を足すことで求められます。

セ氏温度を華氏温度に変換する関数celsius_to_fahrenheitを定義し、セ氏入力すると華氏温度を出力するプログラムを書きなさい。


        def celsius_to_fahrenheit(x):    # セ氏から華氏に換算する関数
          y = x * 9 / 5 + 32
          return y
                
                
        celsius = float(input("セ氏温度 = "))    # セ氏を入力し、float型に変換
        fahrenheit = celsius_to_fahrenheit(celsius)    # ※関数を呼び出して、戻り値を代入
        print("セ氏", celsius, "度 は、華氏", fahrenheit, "度 です。")
      

        セ氏温度 = 36.4    # 36.4と入力
        セ氏 36.4度 は、華氏97.52度 です。
      

※変数celsiusを引数として換算する関数celsius_to_fahrenheitを関数の呼び出し、その戻り値を変数fahrenheitに代入しています。

例2 二次方程式の解

二次方程式の係数a, b, cを引数として受け取り、戻り値として二次方程式の解を返す関数quadratic_formulaを定義し、解を出力するプログラムを書きなさい。ただし、quadratic_formula関数の戻り値は、解なしの場合はFalse,重解の場合はfloat型,異なる2つの解の場合はリスト[x1, x2]とし、戻り値の種類によって条件分岐して出力しなさい。


        def quadratic_formula(a, b, c):   # 二次方程式の解を求める関数
          discriminant = b ** 2 - 4 * a * c    # 判別式を求める

          if discriminant < 0:
            return False
          elif discriminant == 0:
            return -b / (2 * a)
          else:
            x1 = (-b - discriminant ** 0.5) / (2 * a)
            x2 = (-b + discriminant ** 0.5) / (2 * a)
            return [x1, x2]


        a = float(input("a = "))
        b = float(input("b = "))
        c = float(input("c = "))

        x = quadratic_formula(a, b, c)     # 関数を呼び出して、戻り値を代入する


        if x == False:
          print("解なし")
        elif type(x) == float:
          print("x =", x, "(重解)")
        else:
          print("x =", x[0], ", ", x[1])
      

        a = 1     # 1と入力
        b = -5    # -5と入力
        c = 6     # 6と入力
        x = 2.0 , 3.0