12.オリジナル関数 (2015.3.24)

関数とは一定の処理のまとまりをブロック化したものです。Pythonには様々な組み込み関数が用意されていますが、自分である程度以上の規模のプログラムを書くようになると、一連の処理をまとめてしまった方が効率の良い場合が出てきます。例えば、同じような処理が繰り返し出てきたり、他でも利用できそうなまとまった処理がある場合、関数にまとめると便利になります。

■関数の定義
関数の定義は次のように行います。

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

*処理-1や2の前には必ずインデントが必要になる。また、def式の最後に:(コロン)を付けること。なお、引数の無い場合は括弧のみ記述すれば良く、また、returnの後の戻り値は省略もできる。

関数を呼び出すには、次のように記述します。
変数等 = 関数名(引数1, 引数2, ・・・)

引数の無い場合は括弧のみ記述すれば良く、戻り値の無い場合は必ずしも代入の必要はありません。つまり、次のような記述もできます。
関数名(引数1, 引数2, ・・・)

短いテスト的なプログラムを除き、大抵のプログラムは関数を使うことでわかりやすく、処理の流れも見通しやすくなります。なので個人的にも積極的に利用したいと考えています。そこで重要になるのが、変数の有効範囲(スコープ)です。Pythonの変数には大きく分けて「ローカル変数」と「グローバル変数」があります。ローカル変数は読んで字のごとく、関数内だけで有効な変数です。一方、グローバル変数は一塊のプログラム(モジュール)全体で参照できる変数です。ローカル変数は関数が実行されて終了すると消失するため、他で利用することはできませんが、グローバル変数はプログラム実行中は常に存在します。スコープが異なるため、グローバル変数とローカル変数は同じ名前を使うことができます。ただし、混在するとミスの元にもなるので、プログラミングの際は別の名前を付けた方が無難です。

グローバル変数であっても、関数内で値を変更したい場合があります。その場合はglobal文を使って宣言することで、関数内でも値を変更できるようにします。記述は次の通りです。
global 変数名

ただし、多用するとどこで変数が書き換えられたかわかりにくくなるので、バグを回避するためにもできれば関数の外で明示的に書き換えを行うべきです。