ホームページ > バックエンド開発 > Python チュートリアル > Python 関数で静的変数をシミュレートするにはどうすればよいですか?

Python 関数で静的変数をシミュレートするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-06 13:59:09
オリジナル
418 人が閲覧しました

How Can We Simulate Static Variables in Python Functions?

Python 関数内での静的変数の利用

C/C では、静的変数は関数呼び出し全体で値を保持する上で重要な役割を果たします。ただし、Python には、この概念に相当する明示的な概念がありません。したがって、Python 関数内で静的変数を効果的に実装するにはどうすればよいでしょうか?

Python の慣用的なアプローチには、クラスレベルの変数の操作が含まれます。これは、関数とそれに関連付けられた状態をカプセル化するクラスを定義することで実現できます。ただし、クラスの使用が望ましくないシナリオでは、代替メソッドを使用する必要があります。

1 つの回避策には、以下に示すように、関数の名前空間を利用することが含まれます。

def foo():
    if not hasattr(foo, "counter"):
        foo.counter = 0
    foo.counter += 1
    print("Counter is %d" % foo.counter)
ログイン後にコピー

このコード スニペットは、以下の中でカウンターを定義します。関数の名前空間を定義し、呼び出し間で名前空間が保持されるようにします。ただし、最初の呼び出し時に明示的な初期化が必要です。

より簡潔でカスタマイズされたアプローチとして、デコレータを使用できます。次のデコレータは静的変数を作成し、指定されたキーワード引数に基づいて初期化します:

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
    print("Counter is %d" % foo.counter)
ログイン後にコピー

このデコレータを利用することで、カウンタの初期化コードを関数定義の先頭に配置できるため、より直観的で読みやすい実装が可能になります。

以上がPython 関数で静的変数をシミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート