C/C では、関数は静的変数を宣言して、関数呼び出し全体で状態を維持できます。一方、Python は、デフォルトでは関数内の静的変数をサポートしません。
Python 関数内で静的変数の動作を複製するには、次のコマンドを使用します。アプローチ:
<br>def foo():</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">if not hasattr(foo, "counter"): foo.counter = 0 foo.counter += 1 print("Counter is", foo.counter)
ここでは、関数内に「counter」属性が存在するかどうかを確認します。存在しない場合は、0 に初期化します。この初期化コードは、最初の関数呼び出しの開始時に実行されます。
読みやすさを向上させ、初期化コードを次の場所に移動します。一番上では、デコレータを使用できます:
<br>def static_vars(**kwargs):</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">def decorate(func): for k in kwargs: setattr(func, k, kwargs[k]) return func return decorate
@static_vars(counter=0)
def foo():
foo.counter += 1 print("Counter is", foo.counter)
関数をクラス内に配置しても、静的変数の実装は変更されません。静的変数は引き続き関数固有であり、クラス固有ではありません。
以上がPython 関数で静的変数をシミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。