Pythonチュートリアル 4章 制御構造ツール(5)

関数を定義する(引数について)

関数の引数には、可変個の引数を定義することもできます。引数の定義方法には3つの形式があり、それらを組み合わせることができます。

デフォルトの引数値

デフォルトの引数を使用すると、関数の呼び出し時に引数を指定しなかった場合に、デフォルトの引数値が使用されます。

3行目でask_ok関数を定義していますが、引数の2個目と3個目をデフォルト引数を使用してそれぞれデフォルト値をセットしています。
このask_ok関数を呼び出す時に、2個目と3個目の引数を指定しなかった場合には、関数定義時に指定しているデフォルト値が使用されます。また、引数を指定した場合には、指定した値にて実行されます。
また、while文のループの中で、if文とinキーワードを使い画面からの入力された値を判断して、条件に該当する文字が入力された場合には、このループを抜けます。
該当する文字が入力されなかった場合には、retriesの数を毎回マイナス1しています。
さらにretriesが0より小さくなった場合には、raiseで例外エラーを発生させて処理を終了しています。

デフォルト値の評価について

・デフォルト値は、関数が定義された時点で、関数を定義している側のスコープ (scope) で評価されます。
・デフォルト値は、1度だけしか評価されません。

5行目で関数fを定義していますが、このf関数のarg引数のデフォルト値は、ここでは5となります。

3行目でf関数を定義していますが、f関数の引数Lはリストで初期化していますが、この初期化は、関数が最初に呼び出された1度目だけ実施されます。
2回目以降f関数が呼び出された時は、初期化は行われません。
この為、Lリストの値は、引数をappend(追加)して3回目呼び出し後には[1,2,3]となっています。

まとめ

今回は、関数のデフォルトの引数について説明しました。
次回は、キーワード引数について説明します。