問題:
C/C と同様に、Python は関数内に静的変数をどのように実装しますか? s 関数で定義された静的メンバー変数レベル?
答え:
Python では、関数内の静的変数に直接相当するものはありません。ただし、ネストされた関数とクロージャを組み合わせて同様の機能を実現できます。
def foo(): def counter(): if not hasattr(foo, "counter_value"): foo.counter_value = 0 foo.counter_value += 1 return foo.counter_value return counter
ここでは、関数 foo() がネストされた関数 counter() を定義しています。外部関数 foo() は、counter() のクロージャーとして機能し、分離された名前空間を提供します。
カウンターにアクセスしてインクリメントするには、次のように呼び出します。
counter = foo() counter() # Initializes the counter counter() # Increments the counter
デコレーターのアプローチ:
もう 1 つのアプローチは、デコレーターを使用して静的オブジェクトを作成することです。 variable:
def static_vars(**kwargs): 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 return foo.counter
この構文を使用すると、静的変数をより簡単に初期化してアクセスできますが、foo を使用する必要があります。接頭辞。
以上がPython で静的関数変数をシミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。