PyLearn 04: 関数

プログラムを組むとき、よく使う機能を一つの処理の塊(関数といいます)にしておくことで、省コストかつバグが少ないシステムを開発することができます。ここでは、関数を作成する方法について説明します。 関数として、

  • 入力無し・返り値無し
  • 入力有り・返り値無し
  • 入力有り・返り値有り

の3つがよく使われます。

入力無し・返り値無し

はじめに、入力無し・返り値無しの関数を作ってみます。入力と返り値が無しとは、その関数に何も入れず、何も値を返してこない関数のことです。以下は、警告文を表示する関数です。

In [1]:
def PrintWarning():
    print("警告!この操作は禁止されています!")
    print("禁止!!!!")

この関数を使うためには、PrintWarning()と入力すればokです。以下にこの関数を使うコードの例を示します。このコードは、偶数を入力するシステムです。偶数以外(奇数や小数)が入力されたとき、警告文が出るようになっています。

In [2]:
print("好きな偶数を入力してください。")
x=float(input())

if x % 2 == 0:
    print("あなたの好きな偶数は", x, "ですね。")
elif x % 2 != 0:
    PrintWarning()
好きな偶数を入力してください。
3.1415
警告!この操作は禁止されています!
禁止!!!!

入力有り・返り値無し

次に、入力がある場合を扱ってみます。例として、底辺と高さが入力されたとき、その直角三角形の面積を求める関数を作ってみます。PrintWarning関数とどう違うか見比べてみると良いと思います。

In [3]:
def SankakuMenseki(Height, Waidth):
    print("高さ:", Height)
    print("底辺の長さ:", Waidth)
    Menseki = (Height*Waidth)/2
    print("三角形の面積:", Menseki)

これでokです。PrintWarning関数と違って、関数名のカッコの中に2つの変数が追加されています。HeightとWaidthに数字を与えてあげると、print関数で高さと底辺の長さをが表示されます。そして、三角形の面積が計算され、これをprint関数で出力しています。この関数を実際に使ってみます。

In [4]:
SankakuMenseki(2, 3)
高さ: 2
底辺の長さ: 3
三角形の面積: 3.0

上のように、関数名を書き、2つの数字を入れてあげればokです。2つの数字を入れてあげなくてはいけないので、以下のように1つしか入れない場合はエラーになります。Waidthはいくつだよ、となってしまいます。

In [5]:
SankakuMenseki(2)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-fa08a4807095> in <module>
----> 1 SankakuMenseki(2)

TypeError: SankakuMenseki() missing 1 required positional argument: 'Waidth'

関数を作るとき、入力として代表的な値が決まっているときは、関数を定義する際、その値をつけておくこともできます。以下の関数は、Waidthに初めから2を入れているパターンです。(大量の入力を要するような開発をするとき以外は、使わなくて良いと思います)

In [6]:
def SankakuMenseki_Ver2(Height, Waidth=2):
    print("高さ:", Height)
    print("底辺の長さ:", Waidth)
    Menseki = (Height*Waidth)/2
    print("三角形の面積:", Menseki)

すると、以下のように入力が一つでも機能するようになります。Heightを1とし、Waidthは最初から与えられている2を用いて計算していることがわかります。

In [7]:
SankakuMenseki_Ver2(1)
高さ: 1
底辺の長さ: 2
三角形の面積: 1.0

もちろん、waidthも入力することができます。

In [8]:
SankakuMenseki_Ver2(2, 5)
高さ: 2
底辺の長さ: 5
三角形の面積: 5.0

入力有り・返り値有り

最後に、入力があり、返り値もある関数について説明します。一番よく使います。今までの関数は、計算結果をprint関数で表示しているだけでした。計算結果を表示するのではなく、受け取って別の計算に反映させたい、という場合も出てくるでしょう。関数が数字を返して欲しいわけです。これを返り値と言います。

以下の関数は、四角形の面積を求める関数です。これは、前に構築したSankakuMenseki関数とは違い、具体的な値を返してくれます。

In [9]:
def ShikakuMenseki(Height, Waidth):
    Menseki = Height*Waidth
    return Menseki    

SankakuMensekiのときにはなかった、return Mensekiが記されています。これは、Mensekiに入っている値を返してくれる、という意味を持っています。以下は、実際に使って見たコードです。ShikakuMenseki関数の返り値を、変数aが受け取っています。そのため、aには面積が入っています。

In [10]:
a=ShikakuMenseki(2,10)
print("四角形の面積:", a)
四角形の面積: 20

応用

いくつか関数の応用を示します。すべて、なぜそうなるのか考えて見てください。

総和を計算する関数

以下の関数は、リストに入っている数値の総和を計算する機能を持ちます。

In [11]:
# 総和を計算する関数
def SumValue(L):
    s=0
    for i in range(0, len(L)):
        s=s+L[i]
    return s

# 関数の利用
b = [1, 2, 3, 4, 5]
c = SumValue(b)
print(c)
15

奇数・偶数判定関数

以下の関数は、奇数か偶数か判定してくれる関数です。

In [12]:
# 奇数・偶数を判定する関数
def ValueRecognition(v):
    if v % 2 == 0:
        print("偶数")
    if v % 2 == 1:
        print("奇数")
        
# 関数の利用
ValueRecognition(100)
ValueRecognition(55)
偶数
奇数

絶対値に変換する関数

以下の関数は、入力された数字を絶対値に変換し、出力する関数です。

In [13]:
# 絶対値に変換する関数
def AbsFunc(s):
    if s < 0:
        return (-1)*s
    elif s >= 0:
        return s

# 関数の利用
print("入力数字:")
x = float(input())
print("絶対値:", AbsFunc(x))
入力数字:
-1024
絶対値: 1024.0