Python は関数のデフォルト値を使用して関数の静的変数を実装します。静的メソッドの場合は、 @staticmethod アノテーションを使用できます。
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 でクラスの静的変数を理解する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。