関数

Python での関数はまとまった処理に名前をつけておき, プログラム中で利用できるようにするものです. 同じ処理を複数回記述することを防ぎ, 再利用性を高めることが出来ます.

Python での関数は

  • 定義した個数の引数をとり
  • なんらかの処理を行う
  • 返り値を返す

ものです.

ここでの 引数 は関数の外部から値を受け取るための特別な変数, またはその変数の値のことで, 返り値 は関数が関数の外部に返す値のことです.

これまで登場した関数の例:

  • print
    • 引数: 文字列や数値など
    • 処理: 引数の値を表示する
    • 返り値: なし (None)
  • input
    • 引数: 表示するメッセージ
    • 処理: 入力を1行受け取る
    • 返り値: 受け取った入力を文字列として返す

関数定義

Python で関数は次のようにして定義します.

def 関数名(仮引数名1, 仮引数名2, ...):
    # 処理
    return 返り値

Python では関数の中身の部分はインデント (字下げ) が必要です. 一般的に Tab キーを用いて, 半角スペース4つを入力します. インデントを行うことで, その関数の処理と関数の外部の範囲を区別することが出来ます.

In [1]:
# 例: x と y を加算する関数
def add(x, y):
    return x + y

# 例: x * y + z を計算する関数
def madd(x, y, z):
    temp = x * y
    return temp + z

関数を定義するだけでは関数の内部の処理は実行されません. 関数を利用するには次の関数適用を行います.

関数呼び出し

関数を利用するには 関数名(実引数1, 実引数2, ...) のように記述します.

In [2]:
# 例:
x = add(2, 3)
print(x)

y = madd(2, 3, 4)
print(y)
5
10

関数を呼び出すと, 関数定義で定義した処理が実行されます. その際に指定した実引数が, 仮引数に代入されます.

In [3]:
# add(2, 3)の呼び出しのイメージ:
x = 2
y = 3
# x + y を返す

# madd(2, 3, 4) の呼び出しのイメージ:
x = 2
y = 3
z = 4
temp = x * y
# temp + z を返す

呼び出した関数が return で返り値を返す場合, 返り値を print 関数で表示したり, 変数に代入することが出来ます.

In [4]:
# add(2, 3) の実行のイメージ:
# add(2, 3) →
# 5

# print(add(2, 3)) の実行のイメージ:
# print(add(2, 3)) →
# print(5) →
# 5 が表示される


# x = add(2, add(1, 3)) の実行のイメージ:
# x = add(2, add(1, 3)) →
# x = add(2, 4) →
# x = 6 →
# x に 6 が代入される

関数は再帰的に呼び出すことが出来ます. 階乗 (n! = 1 * 2 * 3 * ... * n) を求めるプログラム (if 文は後ほど説明します):

In [5]:
def fact(n):
    if n <= 0:
        return 1
    else:
        return n * fact(n - 1)

print(fact(10))
3628800

練習

  • 3つの数を引数としてとり, それらの積を返すような関数 mult3 を作ってみましょう
  • 引数をとらず, 入力を1行受け取り, 受け取った入力を整数に変換して返す関数 input_int を作ってみましょう