この記事の例は、Python が関数のデフォルト値を使用して関数の静的変数を実装する方法を示しています。具体的な方法は次のとおりです。
1. Python 関数のデフォルト値
Python 関数のデフォルト値を使用すると、関数を呼び出すときにコードを記述するときに便利になります。多くの場合、デフォルト値を使用するだけで済みます。 そのため、Pythonでは特にクラスの初期化関数で関数のデフォルト値がよく使われます。 クラスを使用する場合、大量のパラメーターを渡さずにクラスを簡単に作成できます。
関数パラメータ名の後に「=defalut_value」を追加する限り、関数のデフォルト値が定義されます。注意すべき点の 1 つは、デフォルト値を持つパラメータは関数パラメータ リストの最後になければならないということです。デフォルト値を持たないパラメータは、デフォルト値を持つパラメータの後に配置することはできません。そのように定義すると、インタプリタはパラメータの受け渡し方法を知りません。
まずサンプルコードを見てみましょう:
def ask_ok(prompt, retries=4, complaint='Yes or no, please!'): while True: ok = raw_input(prompt) if ok in ('y', 'ye', 'yes'): return True if ok in ('n', 'no', 'nop', 'nope'): return False retries = retries - 1 if retries < 0: raise IOError, 'refusenik user' print complaint
上記の関数を呼び出すと、再試行回数と出力プロンプト言語を変更できます。面倒な場合は何も変更する必要はありません。
2. Python は関数のデフォルト値を使用して関数の静的変数を実装します
静的変数は Python ではサポートされていませんが、関数のデフォルト値を使用して静的変数の関数を実装できます。
関数のデフォルト値が内容が変更可能なクラスである場合、クラスの内容は変更可能ですが、クラスの名前は変更されません。 (開いたメモリ領域は変化しないのと同じですが、内容は変化する可能性があります)。
これは、Python の関数のデフォルト値は 1 回しか実行されないためです (静的変数と同様、静的変数の初期化も 1 回実行されます)。これが共通点です。
次のプログラムの一部を見てください:
def f(a, L=[]): L.append(a) return L print f(1) print f(2) print f(3) print f(4,['x']) print f(5)
出力結果は次のとおりです:
[1] [1, 2] [1, 2, 3] ['x', 4] [1, 2, 3, 5]
上記はわかりやすいですが、なぜ最後の「print f(5)」の出力が「[1, 2, 3, 5]」になるのでしょうか?
これは、「print f(4,['x'])」のときにデフォルト変数が変更されていないためです。デフォルト変数の初期化は 1 回だけ (デフォルト値での最初の呼び出し) しか実行されないためです。初期化が実行されます。オープンされたメモリ領域(デフォルト変数と呼ぶことができます)は変更されていないため、最終的な出力結果は「[1, 2, 3, 5]」になります。
この記事で説明されている例は、Python プログラミングを行うすべての人にとって役立つと思います。