Python では、 C/C などの言語で見られるように、関数内で静的変数の動作を模倣することは、最初は次のように見えるかもしれません。複雑なタスク。ただし、この機能を実現するにはいくつかのアプローチがあります。
1 つの解決策には、関数自体の名前空間を利用することが含まれます。関数オブジェクトに属性を割り当てることで、そのスコープ内に静的変数を効率的に作成できます。次のコードを考えてみましょう。
def foo(): foo.counter += 1 print("Counter is %d" % foo.counter) foo.counter = 0
このアプローチでは、関数の外でカウンター変数を初期化し、それを関数オブジェクトの名前空間に割り当てます。その結果、 foo() を呼び出すたびにカウンタが 1 ずつ増加し、複数の呼び出しにわたってその状態が維持されます。
あるいは、デコレータ関数を使用して静的変数の作成を自動化することもできます。次のデコレータ static_vars() は、キーワード引数を受け取り、デコレータ関数の属性として設定します。
def static_vars(**kwargs): def decorate(func): for k in kwargs: setattr(func, k, kwargs[k]) return func return decorate
このデコレータを使用すると、foo() 関数を次のように記述できます。
@static_vars(counter=0) def foo(): foo.counter += 1 print("Counter is %d" % foo.counter)
デコレーターは、カウンター変数が一度初期化され、foo() に関連付けられたままであることを保証します。 function.
これらのメソッドは関数レベルで静的変数を効果的にエミュレートしますが、 C/C とは異なり、Python 関数は特定のオブジェクト インスタンスにバインドされていないことに注意してください。したがって、フー。静的変数は関数オブジェクト自体に関連付けられているため、静的変数にアクセスする場合はプレフィックスが必要です。
以上がPython 関数で静的変数を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。