関数は、処理のまとまりに名前をつけることで再利用できるようにしたものです。Pythonで関数を定義するにはdefを使います。
関数の定義
次のような定型的な処理があった時、プログラムの中で必要になる度に記述するのは効率がよくありません。
print "####################"
print "# Author: XXX #"
print "# 20xx/xx/xx #"
print "####################"
そこで、defを使って上記の処理を関数として定義します。一度定義した関数は再利用することができます。
def print_comment():
print "####################"
print "# Author: XXX #"
print "# 20xx/xx/xx #"
print "####################"
ここでは、print_commentという名前で関数を定義しています。定義した関数を再利用するには次のように名前(関数名)を記述します。
print_comment()
defの書式は以下の通りです。処理はインデントをつけて記述します。
def 関数名():
処理1
処理2
・・・
引数のある関数の定義
一般に、関数は入力と出力を持つことができ、入力を処理した結果を出力します。この時、関数への入力を引数と呼び、関数の出力を返り値と呼びます。
aとbを引数(入力)として受け取り、足し算した結果を出力として返す関数addを考えてみます。
def add(a, b): # a, bは引数
return a + b
print add(2, 3) # 5
関数を呼び出す側が渡す値を実引数と呼び、関数側で実引数を受け取る変数を仮引数と呼びます。仮引数は関数名の後の()にカンマ区切りで記述します。上記の例では、addを呼ぶ際に2と3を実引数として渡しています。これらの値はそれぞれ関数addの仮引数である変数a, bにコピーされます。
仮引数はローカル変数として扱われるため、関数の外側で同じ名前の変数が宣言されていてもその変数を書き換えてしまうことはありません。
def f(a, b): # a, bはローカルスコープを持つ
a + 1
b + 1
a = 2
b = 3
f(a,b)
print a, b # 2 3
引数を持つ関数をdefを使って定義する書式は以下の通りです。
def 関数名(仮引数1, 仮引数2, ...):
処理1
処理2
・・・
デフォルト引数
関数を呼び出す際に引数を指定しなかった場合、予め設定した値をデフォルトとして使うようにすることができ、これをデフォルト引数と呼びます。次のサンプルプログラムは、上記の関数addにデフォルト引数として0を設定しています。
def add(a, b = 0):
print a + b
add(2, 3) # 5
add(2) # 2
add(3) # 3